Unit <- AttackUnit <- Marin, Firebat, Medic

 

1)  생성: 마린, 파이어뱃, 매딕

2)  공격: 마린 > 파이어뱃

     공격: 파이어뱃 > 마린

3) 치료: 매딕 > 파이어뱃

이름 속성 능력치
Marin 체력 40
Marin 방어력 0
Marin 공격력 6
Firebat 체력 50
Firebat 방어력 0
Firebat 공격력 6
Medic 체력 60
Medic 방어력 0
Medic 에너지 200(생성 시 /2)

 

 

 

 

  • Main
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

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

 

  • App
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816
{
    public class App
    {
        //생성자
        public App() 
        {
            Console.WriteLine("App 생성자 실행");
            
            // 마린
            MarinData marindata = new MarinData(40, 0, 6);
            Marin marin = new Marin("마린", marindata);

            // 파이어뱃
            FirebatData firebatData = new FirebatData(50, 0, 6);
            Firebat firebat = new Firebat("파이어뱃", firebatData);

            marin.Attack(firebat);
            firebat.Attack(marin);

            // 매딕
            MedicData medicData = new MedicData(60, 0, 200);
            Medic medic = new Medic("메딕", medicData);
            medic.Heal(firebat);
        }
    }
}

 

  • Unit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816
{// 체력, 방어력

    public class Unit
    {
        //맴버 변수
        public string name;
        public int hp;
        public int maxHp;
        public int armor;
        public int energe;

       

        //생성자
        public Unit() 
        {
            Console.WriteLine("Unit 생성자 실행");
        }

        public void Move()
        {
            
        }


        public void HitDamage(int damage)
        {
            this.hp -= damage;
            Console.WriteLine($"피해:{this.name}이 {damage}를 받았습니다. {this.hp}/{this.maxHp}\n");
        }


        public void IncreseHP(int addHp)
        { 
            this.hp += addHp;

            if (this.hp >= this.maxHp)
            {
                this.hp = this.maxHp;
            }

            Console.WriteLine($"{this.name}의 체력이 {addHp}만큼 회복되었습니다.{this.hp}/{this.maxHp}");
        }
    }
}

 

  • AttackUnit
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816
{//공격력

    public class AttackUnit : Unit
    {
        public int damage;


        //생성자
        public AttackUnit()
        {
           Console.WriteLine("AttackUnit 생성자 실행");
        }

        public virtual void Attack(Unit unit) // 타입 매서드 사용
        {

        }
    }
}

 

  • Marin
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816
{
    public class Marin : AttackUnit
    {
        public int energe;
        MarinData data;

        public Marin(string name, MarinData data) 
        {
            Console.WriteLine("Marin 유닛이 생성되었습니다.");
            this.name = name;
            this.data = data;

            this.hp = data.maxHp;
            this.armor = data.armor;
            this.damage = data.damage; 
            this.maxHp = data.maxHp;
               

            Console.WriteLine($"체력: {this.hp}/{data.maxHp}");
            Console.WriteLine($"방어력: {this.armor}");
            Console.WriteLine($"공격력: {this.damage}\n");
            
        }

        // 베이스 클래스에서 정의된 매서드를 재정의
        public override void Attack(Unit unit)
        {
            Console.WriteLine($"{this.name}이 {unit.name}을 총으로 공격합니다.");
            unit.HitDamage(this.damage);
        }
    }
}

 

  • Firebat
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816
{
    public class Firebat : AttackUnit
    {
        //맴버 변수
        FirebatData data;

        //생성자
        public Firebat(string name, FirebatData data) 
        {
            Console.WriteLine("Firebat이 생성되었습니다.");
            this.name = name;
            this.data = data;

            this.hp = data.maxHp;
            this.armor = data.armor;
            this.damage = data.damage;
            this.maxHp = data.maxHp;

            Console.WriteLine($"체력:{this.hp}/{data.maxHp}");
            Console.WriteLine($"방어력:{this.armor}");
            Console.WriteLine($"공격력:{this.damage}\n");
        }

        // 베이스 클래스에서 정의된 매서드를 재정의
        public override void Attack(Unit unit)
        {
            Console.WriteLine($"{this.name}이 {unit.name}을 화염방사기로 공격합니다.");
            unit.HitDamage(this.damage);
        }
    }
}

 

  • Medic
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace D_0816

{
    public class Medic : Unit
    {
        //맴버 변수
        public int energe;
        public MedicData data;

        public Medic(string name, MedicData data) 
        {
            Console.WriteLine("Medic이 생성되었습니다.");

            this.name = name;
            this.data = data;

            this.hp =data.maxHp;
            this.maxHp =data.maxHp;
            this.armor =data.armor;
            this.energe = data.energe / 2;


            Console.WriteLine($"체력:{this.hp}/{this.maxHp}");
            Console.WriteLine($"방어력:{this.armor}");
            Console.WriteLine($"에너지:{this.energe}/{data.energe}\n");
        }

        public void Heal(Unit unit)
        {
            Console.WriteLine($"{this.name}이 {unit.name}을 치료합니다.");

            bool isSuccess = this.DecraseEnerge(1);
            if (isSuccess)
            {
                unit.IncreseHP(1);
            }
        }

        public bool DecraseEnerge(int val)
        {
            if (this.energe <= 0)
            {
                Console.WriteLine($"{this.name}의 에너지가 부족합니다. {this.energe}/{data.energe}");
                return false;
            }
            else
            {
                this.energe -= val;

                Console.WriteLine($"{this.name}의 에너지가 {val}만큼 감소하였습니다.{this.energe}/{data.energe}");
                return true;
            }
        }
    }
}

 

+ Recent posts