본문 바로가기
KDT/C# 프로그래밍

23/07/26 가짜 인벤토리 만들기2

by 잰쟁 2023. 7. 26.
728x90

아이템 속성
몬스터 속성

아이템 클래스

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace starcraft
{
    public class Item
    {
        public enum eItemType 
        { 
            WEAPON,
            ARMOR,
            POTION
        }

        public ItemData data;
        private eItemType itemType;

        //생성자
        public Item(ItemData data)
        {
            this.data = data;
            this.itemType = (eItemType)data.item_type;
        }

        //아이템 데이터의 이름을 반환하는 메서드
        public string GetName()
        {
            //반환값
            return this.data.name;
        }

        //아이템의 타입을 가져옴
        public eItemType GetItemType()
        {
            return this.itemType;
        }
    }
}

아이템데이터 클래스

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

namespace starcraft
{
    public class ItemData
    {
        //아이템의 정보
        public int id;
        public string name;
        public int item_type;
        public int damage;
        

        //생성자
        public ItemData(int id, string name,int item_type, int damage)
        {
            this.id = id;
            this.name = name;
            this.item_type = item_type;
            this.damage = damage;
            
        }

    }
}

몬스터 클래스

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

namespace starcraft
{
    internal class Monster
    {
        public MonsterData data;
        Dictionary<int, ItemData> dicItemDatas;
        public int hp;

        //생성자
        public Monster(Dictionary<int, ItemData> dicItemDatas, MonsterData data)
        {
            this.data = data;
            this.dicItemDatas = dicItemDatas;
            this.hp = this.data.hp;
        }


        //몬스터 죽는 메서드
        public Item Die()
        {
            Console.WriteLine("몬스터({0})가 죽었습니다.", this.data.name);

            ItemData itemData = this.dicItemDatas[this.data.item_id];
            return new Item(itemData);
        }

        //몬스터 피해입는 메서드
        public void HitDamage(int damage)
        {
            this.hp -= damage;
        }

        //몬스터 HP 보이기
        public int GetHp()
        {
            return this.hp;
        }
    }
}

몬스터데이터 클래스

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

namespace starcraft
{
    internal class MonsterData
    {
        public int id;
        public string name;
        public int item_id;
        public int hp;

        //생성자
        public MonsterData(int id, string name, int item_id,int hp)
        {
            this.id = id;
            this.name = name;
            this.item_id = item_id;
            this.hp = hp;
        }
    }
}

인벤토리 클래스

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

namespace starcraft
{
    internal class Inventory
    {
        //아이템을 그룹/관리
        List<Item> items;  //변수 정의
        public int capacity;

        //생성자
        public Inventory(int capacity)
        {
            this.capacity = capacity;
            //컬렉션은 사용전 인스턴스화
            this.items = new List<Item>();
            Console.WriteLine("{0}칸짜리 가방이 생성되었습니다.", this.capacity);
        }

        //아이템 추가
        public void AddItem(Item item)
        {
            //요소수
            //Console.WriteLine("{0}/{1}", this.items.Count, this.capacity);

            if(this.items.Count == this.capacity)
            {
                Console.WriteLine("공간이 부족합니다.");
                return;
            }
            this.items.Add(item);
            Console.WriteLine("{0}이 추가되었습니다. [{1}/{2}]", item.data.name, this.items.Count, this.capacity);
        }

        //ID로 찾아서 꺼내기(가장먼저 찾은)
        public Item GetItem(int id)
        {
            //리스트를 순회
            for(int i = 0; i < this.items.Count; i++)
            {
                Item item = this.items[i];
                if(item.data.id == id)
                {
                    Console.WriteLine("찾았다!");
                    this.items.Remove(item);
                    return item;
                }
              
            }
            return null;
        }
    }
}

아이템-weapon 클래스

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

namespace starcraft
{
    public class Weapon : Item
    {

        //생성자
        public Weapon(ItemData data) : base(data)
        {

        }
    }
}

아이템-armor 클래스

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

namespace starcraft
{
    public class Armor : Item
    {

        //생성자
        public Armor(ItemData data) : base(data)
        {

        }
    }
}

아이템-potion 클래스

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

namespace starcraft
{
    public class Potion : Item
    {

        //생성자
        public Potion(ItemData data) : base(data)
        {

        }
    }
}

app 클래스

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



namespace starcraft
{
    public class App
    {

        //생성자
        public App()
        {
            //컬렉션의 초기화
            Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
            dic.Add(100, new ItemData(100, "장검",0, 8));
            dic.Add(101, new ItemData(101, "단검",0, 5));
            dic.Add(102, new ItemData(102, "활",0, 6));
            dic.Add(103, new ItemData(103, "도끼",0, 10));
            dic.Add(104, new ItemData(104, "사슬 갑옷", 1, 0));
            dic.Add(105, new ItemData(105, "체력 물약", 2, 0));

            //진짜 무기 생성
            Weapon weapon = new Weapon(dic[100]);  //장검
            Armor armor = new Armor(dic[104]);  //사슬 갑옷
            Potion potion = new Potion(dic[105]);  //체력 물약

            //인벤토리 초기화
            Inventory inven = new Inventory(3);
            inven.AddItem(weapon);
            inven.AddItem(armor);
            inven.AddItem(potion);

            //ID로 아이템 찾아서 꺼내기
            Weapon item = (Weapon)inven.GetItem(100);  //다운캐스팅
            //아이템타입 출력
            Console.WriteLine(item.GetItemType());   //WEAPON
        }

    }
}