장비 착용 시스템 Practice

sejun-Lee·2025년 3월 27일

다시한번 보면서 스스로 공부해 보자..


 // 게임 장비 착용 시스템
 public class Player
 {
     private int hp = 100;
     private int defense = 10;

     private Armor armor;

     public event Action OnTakeDamaged;

     public void TakeDamage(int damage)
     {
         Console.WriteLine("플레이어가 타격을 받습니다.");
         int totalDamage = defense > damage ? 0 : damage - defense;
         hp -= totalDamage;

         OnTakeDamaged?.Invoke();
     }

     public void Equip(Armor armor)
     {
         Console.WriteLine("플레이어가 장비를 착용합니다.");
         this.armor = armor;
         defense += armor.Defense;
         Console.WriteLine("플레이어의 방어력이 {0} 이 되었습니다.", defense);

         OnTakeDamaged += armor.TakeDamage;
         armor.OnBreaked += UnEquip;
     }

     public void UnEquip()
     {
         if (armor != null)
         {
             Console.WriteLine("플레이어가 장비를 해제합니다.");
             armor.OnBreaked -= UnEquip;
             OnTakeDamaged -= armor.TakeDamage;

             defense -= armor.Defense;
             this.armor = null;
             Console.WriteLine("플레이어의 방어력이 {0} 이 되었습니다.", defense);
         }
     }
 }

 public class Armor
 {
     private int durability = 3;
     private int defense = 10;
     public int Defense { get { return defense; } private set { defense = value; } }

     public event Action OnBreaked;

     public void TakeDamage()
     {
         Console.WriteLine("장비가 내구도가 닳습니다.");
         durability--;
         Console.WriteLine("장비의 내구도가 {0} 이 되었습니다.", durability);
         if (durability <= 0)
         {
             Break();
         }
     }

     private void Break()
     {
         Console.WriteLine("갑옷이 부셔집니다.");

         OnBreaked?.Invoke();
     }
 }

 static void Main(string[] args)
 {
     Player player = new Player();
     Armor armor = new Armor();

     player.Equip(armor);

     player.TakeDamage(1);
     player.TakeDamage(1);
     player.TakeDamage(1);
     player.TakeDamage(1);
 }

플레이어가 장비를 착용합니다.
플레이어의 방어력이 20 이 되었습니다.
플레이어가 타격을 받습니다.
장비가 내구도가 닳습니다.
장비의 내구도가 2 이 되었습니다.
플레이어가 타격을 받습니다.
장비가 내구도가 닳습니다.
장비의 내구도가 1 이 되었습니다.
플레이어가 타격을 받습니다.
장비가 내구도가 닳습니다.
장비의 내구도가 0 이 되었습니다.
갑옷이 부셔집니다.
플레이어가 장비를 해제합니다.
플레이어의 방어력이 10 이 되었습니다.
플레이어가 타격을 받습니다.

profile
초보 개발자

0개의 댓글