17일차 데일리 과제

IIRU·2026년 6월 9일
  1. Player, Monster 구현 (Delegate 사용 필수)

    hp 구현

    hp가 변경되는 기능 일부 구현(Attack, Heal, 등등)

  2. 간이 Hp UI 구현 (결합도 낮은 방식 접근 권장)

    hp가 변할 때마다 문구 출력

Program.cs

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);

        }

    }
}

Character.cs

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);
        }

    }
}

HealthUI.cs

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}");
        }
    }
}

Player.cs

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();
        }

    }
}

Monster.cs

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();
        }
    }
}
profile
초보 개발자 블로그입니다!

0개의 댓글