Delegate 사용. App의 Delegate객체가 Hero,Monster관리

Console Programming/C# Console 2019. 11. 26. 18:22
using System;
namespace Console1125
{   
    public class App
    {
        public static Action Attack;
        public static Action AttackComplete;
        public static Action Hit;
        public static Func<int> HitComplete;      
        public static Action OnDie;

        public App()
        {
            var hero = new Hero();
            var monster = new Monster();
            Attack();
        }
    }
}
namespace Console1125
{
    public class Hero
    {
        public Hero()
        {
            App.Attack = this.Attack;
            App.AttackComplete = this.AttackCom;
        }
        private void Attack()
        {
            App.Hit();
            App.AttackComplete();
        }
        private void AttackCom()
        {
            if(App.HitComplete()>0)
            {
                App.Attack();
            }
            else
            {
                App.OnDie();
            }
        }
    }

}

using System;
namespace Console1125
{
    public class Monster
    {
        public int hp = 10;       
        public Monster()
        {
            App.Hit = Hit;
            App.HitComplete = ShowHp;
            App.OnDie = Die;
        }
        private void Hit()
        {
            this.hp -= 1;
            Console.WriteLine("공격당했습니다. {0}", this.hp);
            App.HitComplete();
        }
        private int ShowHp()
        {            
           return this.hp;
        }
        private void Die()
        {
            Console.WriteLine("Monster가 죽었습니다");
        }
    }
}

namespace Console1125
{
    class Program
    {
        static void Main(string[] args)
        {
            new App();
        }
    }
}

: