Player, Monster 구현 (Delegate 사용 필수)
hp 구현
hp가 변경되는 기능 일부 구현(Attack, Heal, 등등)
간이 Hp UI 구현 (결합도 낮은 방식 접근 권장)
hp가 변할 때마다 문구 출력

using System;
namespace _260609_2
{
class Program
{
static void Main(string[] args)
{
//플레이어
Player player = new Player(10);
player.PrintHP();
//몬스터
Monster monster = new Monster(5);
monster.PrintHP();
//대미지를 입었을 때
player.TakeDamage(monster);
monster.TakeDamage(player);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;
namespace _260609_2
{
internal class Character
{
private int hp;
public int Hp { get { return hp; } private set { hp = value; } }
protected HealthUI healthUI;
public event Action<int> hpAction;
private int damage;
public int Damage { get { return damage; } private set { damage = value; } }
public Character()
{
healthUI = new HealthUI();
hpAction += healthUI.UpdateUI;
SetHp(100);
}
public void SetDamage(int damage)
{
Damage += damage;
}
public void SetHp(int heal)
{
Hp += heal;
if (Hp < 0)
{
Hp = 0;
}
}
public virtual void TakeDamage(Character character)
{
SetHp(-1 * character.Damage);
hpAction?.Invoke(hp);
}
public virtual void PrintHP()
{
hpAction?.Invoke(hp);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _260609_2
{
internal class HealthUI
{
public void UpdateUI(int hp)
{
Console.WriteLine($"현재체력 : {hp}");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _260609_2
{
internal class Player : Character
{
public Player(int damage)
{
SetDamage(damage);
}
public override void TakeDamage(Character character)
{
Console.WriteLine("[ 사용자 ]");
base.TakeDamage(character);
}
public override void PrintHP()
{
Console.WriteLine("[ 사용자 ]");
base.PrintHP();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace _260609_2
{
internal class Monster : Character
{
public Monster(int damage)
{
SetDamage(damage);
}
public override void TakeDamage(Character character)
{
Console.WriteLine("[ 몬스터 ]");
base.TakeDamage(character);
}
public override void PrintHP()
{
Console.WriteLine("[ 몬스터 ]");
base.PrintHP();
}
}
}