JSON,데이터 관리 연습 3- 몬스터 잡으면 아이템 드롭, 가방에 넣기
2023. 7. 28.

Game.cs 수정
Hero.cs에 Attack추가

Attack하면 몬스터는 Hero클래스의 this.damage만큼 피해를 입는다.

이는 monster클래스의 HitDamage로 구현한다.

Monster.cs에 추가

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

namespace Starcraft
{
    internal class Game
    {
        private Hero hero;
        private Monster monster;
        //생성자
        public Game() { }

        //메서드

        public void Start()
        {
            Console.WriteLine("게임이 시작 되었습니다.\n");
            this.hero = this.CreatHero("홍길동",3);
            this.monster = this.CreateMonster(1000);

            Inventory bag = new Inventory(5);//5칸 짜리 가방 생성
            this.hero.SetBag(bag);//영웅에게 가방 지급

            //아이템 지급(무기)
            Item item = this.CreateItem(100);
            this.hero.SetItem(item);//가방에 넣기
          

            //장비 착용하기
            this.hero.Equip(100);

            //몬스터 공격
            this.hero.Attack(monster);
        }

        public Hero CreatHero(string name,int damage)
        {
            return new Hero(name,damage);
        }
        public Monster CreateMonster(int monster_id)
        {//몬스터 생성 메서드: 몬스터 정보도 가져와야한다.
            MonsterData data = DataManager.Instance.GetMonsterData(monster_id);//데이터 매니저에서 가져옴
            return new Monster(data);
        }

        private Item CreateItem(int item_id)
        {
            ItemData data = DataManager.Instance.GetItemData(item_id);
            return new Item(data);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class Hero
    { 
        private Inventory bag;
        private int damage;
        private string name;
        private Item leftHandItem;
        //생성자
        public Hero(string name, int damage) {
            this.name = name;
            this.damage = damage;
            Console.WriteLine("영웅({0})이 생성되었습니다, damage: {1}", this.name, this.damage);
        }
        //메서드
        public void SetBag(Inventory bag)//가방을 영웅에게 지급하는 메서드
        {
            this.bag = bag;
            Console.WriteLine("영웅이 ({0})칸짜리 가방({1})을 지급받았습니다.", bag.capacity,this.bag);
            
        }

        public void SetItem(Item item)//아이템을 가방에 넣는 메서드
        {
            this.bag.Additem(item);         
        }

        public void Equip(int itemId)
        {
            //가방에서 아이템이 있는지 검색
            if (this.bag.Exist(itemId))
            {
                //착용
                this.leftHandItem = this.bag.GetItem(itemId);
                Console.WriteLine("왼손에 {0}을 착용했습니다.", leftHandItem);

            }
            else
            {
                Console.WriteLine("아이템({0})을 찾을 수 없습니다.",itemId);
            }
           
        }

        public void Attack(Monster target)
        {//몬스터를 공격하는 메서드
            target.HitDamage(this.damage);
        }

    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Starcraft
{
    internal class Monster
    {
        private MonsterData data;
        public int hp;
        public int maxHp;
        public Action onDie; //Action 대리자
        //생성자
        public Monster(MonsterData data) {
            this.data = data;
            this.maxHp = data.maxHp;
            this.hp = maxHp;

            Console.WriteLine("몬스터가 생성되었습니다.(체력:{0}/{1})",hp,maxHp);
        }

        //메서드
        public void HitDamage(int damage)
        {
            this.hp -= damage * int.MaxValue;
            if (this.hp <= 0)
            {
                this.hp = 0;
            }
            Console.WriteLine("공격을 받았습니다. 체력 : {0}/{1}", this.hp, this.maxHp);

            if (this.hp <= 0)
            {
                this.Die();
            }
        }


        private void Die()
        {
          //  Console.WriteLine("몬스터({0})가 사망했습니다.", this.data.monster_id);
            //대리자 호출 
            onDie = () =>
            {
                Console.WriteLine("몬스터({0})가 사망했습니다.", this.data.monster_id);
            };
            this.onDie();
        }
    }
}

'C# 기초' 카테고리의 다른 글

C# LINQ  (0) 2023.07.31
C# 게임 저장, 로드  (0) 2023.07.28
JSON, 데이터 관리연습2-아이템 가방에 넣고 착용하기  (0) 2023.07.28
JSON, 데이터 관리 연습  (0) 2023.07.28
JSON  (0) 2023.07.27
myoskin