C#프로그래밍

가짜 인벤토리 만들기 1단계

다모아 2023. 7. 26. 13:16

1단계
2단계

 

App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            new Item(100, "장검", 8);
        }
    }
}

Item 클래스

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

namespace Game2048
{
    internal class Item
    {
        public int id;
        public string name;
        public int damage;
        //생성자
        public Item(int id, string name, int damage)
        {
            this.id = id;
            this.name = name;
            this.damage = damage;
        }
    }
}

ItemData 클래스

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

namespace Game2048
{
    //아이템의 정보
    internal class ItemData
    {
        public int id;
        public string name;
        public int damage;
        //생성자
        public ItemData(int id, string name, int damage)
        {
            this.id = id;
            this.name = name;
            this.damage = damage;
        }
    }
}

 

App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //아이템 인스턴스화
            new Item(new ItemData(100, "장검", 8));
           
        }
    }
}

Item 클래스

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

namespace Game2048
{
    internal class Item
    {
        public ItemData data;


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

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

 

App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //아이템 인스턴스화
            Item item = new Item(new ItemData(100, "장검", 8));


            Console.WriteLine(item.data.name); //장검
            Console.WriteLine(item.GetName()); //장검
        }
    }
}

 


App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //변수 정의            //컬렉션 인스턴스화 // 초기화
            Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();

            dic.Add(100, new ItemData(100, "장검", 8));
            dic.Add(101, new ItemData(101, "단검", 5));
            dic.Add(102, new ItemData(102, "활", 6));

            //사전에서 키로 값을 가져오기
            //고블린을 잡았다
            //장검이 나왔다 !
            //ItemData data = dic[100];
            //new Item(data);
            Item item = new Item(dic[100]);
            Console.WriteLine(item.data.id); //100
            Console.WriteLine(item.data.name); //장검
            Console.WriteLine(item.data.damage); //8

            //몬스터 데이터를 저장하는 컬렉션
            Dictionary<int, MonsterData> dic2 = new Dictionary<int, MonsterData>();

            dic2.Add(1000, new MonsterData(1000, "고블린"));
            dic2.Add(1001, new MonsterData(1001, "트롤"));
            dic2.Add(1002, new MonsterData(1002, "오우거"));

            //고블린 데이터 가져오기
            Monster monster = new Monster(dic2[1000]);
            Console.WriteLine(monster.data.id); // 1000
            Console.WriteLine(monster.data.name); // 고블린


        }
    }
}

 

MonsterData 클래스

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

namespace Game2048
{
    internal class MonsterData
    {
        public int id;
        public string name;
        //생성자
        public MonsterData(int id, string name)
        {
            this.id = id;
            this.name = name;
        }
    }
}

 

Monster 클래스

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

namespace Game2048
{
    internal class Monster
    {

        public MonsterData data;
        //생성자
        public Monster(MonsterData data)
        {
            this.data = data;
        }
    }
}

App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //변수 정의            //컬렉션 인스턴스화 // 초기화
            Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();

            dic.Add(100, new ItemData(100, "장검", 8));
            dic.Add(101, new ItemData(101, "단검", 5));
            dic.Add(102, new ItemData(102, "활", 6));

            //사전에서 키로 값을 가져오기
            //고블린을 잡았다
            //장검이 나왔다 !
            //ItemData data = dic[100];
            //new Item(data);
            Item item = new Item(dic[100]);
            Console.WriteLine(item.data.id); //100
            Console.WriteLine(item.data.name); //장검
            Console.WriteLine(item.data.damage); //8

            //몬스터 데이터를 저장하는 컬렉션
            Dictionary<int, MonsterData> dic2 = new Dictionary<int, MonsterData>();

            dic2.Add(1000, new MonsterData(1000, "고블린", 100));
            dic2.Add(1001, new MonsterData(1001, "트롤", 101));
            dic2.Add(1002, new MonsterData(1002, "오우거", 102));

            //고블린 데이터 가져오기
            Monster monster = new Monster(dic ,dic2[1000]);
            Console.WriteLine(monster.data.id); // 1000
            Console.WriteLine(monster.data.name); // 고블린
            Console.WriteLine(monster.data.item_id); //100

            Item dropItem = monster.Die();
            Console.WriteLine(dropItem.GetName());
        }
    }
}

 

MonsterData 클래스

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

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

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

 

Monster 클래스

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

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

        public Item Die()
        {
            Console.WriteLine("{0}이 죽었습니다.", this.data.name);

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

Inventory 클래스

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

namespace Game2048
{
    internal class Inventory
    {
        int capacity;
        List<Item> items;
        //생성자
        public Inventory(int capacity)
        {
            this.capacity = capacity;
            this.items = new List<Item>();
            Console.WriteLine("{0}칸짜리 가방이 생성되었습니다.", this.capacity);
        }
        //아이템 추가
        public void AddItem(Item item)
        {
            if(this.items.Count >= 3)
            {
                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;
        }

        //인벤토리 가방 몇개 들었는지 카운트
        public int Count()
        {
            int num = 0;
            for(int i = 0; i < this.items.Count; i++)
            {
                num++;
            }
            return num;
        }

        //모든 아이템 화면출력
        public void PrintAllItems()
        {
            for(int i = 0; i < this.items.Count; i++)
            {
                Item item = this.items[i];
                Console.Write("{0} ", item.data.name);
            }
            Console.WriteLine("\n");
        }
    }
}

 

App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    public class App
    {
        //생성자
        public App()
        {
            //변수 정의            //컬렉션 인스턴스화 // 초기화
            Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
            dic.Add(100, new ItemData(100, "장검", 8));
            dic.Add(101, new ItemData(101, "단검", 5));
            dic.Add(102, new ItemData(102, "활", 6));
            dic.Add(103, new ItemData(103, "도끼", 10));

            //인벤토리
            Inventory inven = new Inventory(3);
            inven.AddItem(new Item(dic[100])); //장검이 추가 되었습니다.
            inven.AddItem(new Item(dic[101])); //단검이 추가 되었습니다.
            inven.AddItem(new Item(dic[102])); //활이 추가 되었습니다.
            Item item = inven.GetItem(100); // 가장 먼저 찾은 id가 100인 아이템을 제거하고 반환
            Console.WriteLine(item.GetName()); //장검
            Console.WriteLine(inven.Count()); // 2
            inven.PrintAllItems();
            //단검
            //활
            inven.AddItem(new Item(dic[100])); //장검이 추가 되었습니다.
            inven.AddItem(new Item(dic[103])); //공간이 부족합니다.

            //사전에서 키로 값을 가져오기
            //고블린을 잡았다
            //장검이 나왔다 !
            //ItemData data = dic[100];
            //new Item(data);
            Item item2 = new Item(dic[100]);
            Console.WriteLine(item2.data.id); //100
            Console.WriteLine(item2.data.name); //장검
            Console.WriteLine(item2.data.damage); //8

            //몬스터 데이터를 저장하는 컬렉션
            Dictionary<int, MonsterData> dic2 = new Dictionary<int, MonsterData>();
            dic2.Add(1000, new MonsterData(1000, "고블린", 100, 50));
            dic2.Add(1001, new MonsterData(1001, "트롤", 101, 45));
            dic2.Add(1002, new MonsterData(1002, "오우거", 102, 65));

            //고블린 데이터 가져오기 , 넣기
            Monster monster = new Monster(dic ,dic2[1000]);
            Console.WriteLine(monster.data.id); // 1000
            Console.WriteLine(monster.data.name); // 고블린
            Console.WriteLine(monster.data.item_id); //100

            //죽었다
            Item dropItem = monster.Die();
            Console.WriteLine(dropItem.GetName());

            monster.HitDamage(5);
            Console.WriteLine("hp : {0}", monster.GetHp());
        }
    }
}


App 클래스

using System;
using System.Collections;
using System.Collections.Generic;

namespace Game2048
{
    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);

            Weapon item = (Weapon)inven.GetItem(100); // 다운캐스팅

            //인벤토리
            //Inventory inven = new Inventory(3);
            inven.AddItem(new Item(dic[100])); //장검이 추가 되었습니다.
            inven.AddItem(new Item(dic[101])); //단검이 추가 되었습니다.
            inven.AddItem(new Item(dic[102])); //활이 추가 되었습니다.
            //Item item = inven.GetItem(100); // 가장 먼저 찾은 id가 100인 아이템을 제거하고 반환
            Console.WriteLine(item.GetName()); //장검
            Console.WriteLine(inven.Count()); // 2
            inven.PrintAllItems();
            //단검
            //활
            inven.AddItem(new Item(dic[100])); //장검이 추가 되었습니다.
            inven.AddItem(new Item(dic[103])); //공간이 부족합니다.

            //사전에서 키로 값을 가져오기
            //고블린을 잡았다
            //장검이 나왔다 !
            //ItemData data = dic[100];
            //new Item(data);
            Item item2 = new Item(dic[100]);
            Console.WriteLine(item2.data.id); //100
            Console.WriteLine(item2.data.name); //장검
            Console.WriteLine(item2.data.damage); //8

            //몬스터 데이터를 저장하는 컬렉션
            Dictionary<int, MonsterData> dic2 = new Dictionary<int, MonsterData>();
            dic2.Add(1000, new MonsterData(1000, "고블린", 100, 50));
            dic2.Add(1001, new MonsterData(1001, "트롤", 101, 45));
            dic2.Add(1002, new MonsterData(1002, "오우거", 102, 65));

            //고블린 데이터 가져오기 , 넣기
            Monster monster = new Monster(dic ,dic2[1000]);
            Console.WriteLine(monster.data.id); // 1000
            Console.WriteLine(monster.data.name); // 고블린
            Console.WriteLine(monster.data.item_id); //100

            //죽었다
            Item dropItem = monster.Die();
            Console.WriteLine(dropItem.GetName());

            monster.HitDamage(5);
            Console.WriteLine("hp : {0}", monster.GetHp());
        }
    }
}

 

Potion 클래스

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

namespace Game2048
{
    public class Potion : Item
    {
        //생성자
        public Potion(ItemData data) : base(data)
        {

        }
    }
}

 

Weapon 클래스

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

namespace Game2048
{
    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 Game2048
{
    public class Armor : Item
    {
        //생성자
        public Armor(ItemData data) : base(data)
        {

        }
    }
}

 

Item 클래스

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

namespace Game2048
{
    public class Item
    {
        public enum eItemType
        {
            WEAPON,
            ARMOR,
            POTION
        }
        public eItemType itemType;
        public ItemData data;

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

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

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

 

itemData 클래스

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

namespace Game2048
{
    //아이템의 정보
    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;
        }
    }
}

 

Monster 클래스

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

namespace Game2048
{
    internal class Monster
    {
        public Dictionary<int, ItemData> dicItemDatas;
        public MonsterData data;
        public int hp;
        
        //생성자
        public Monster(Dictionary<int, ItemData> dicItemDatas ,MonsterData data)
        {
            this.dicItemDatas = dicItemDatas;
            this.data = data;
            this.hp = 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;
        }

        public int GetHp()
        {
            return this.hp;
        }
    }
}

 

Inventory 클래스

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

namespace Game2048
{
    internal class Inventory
    {
        int capacity;
        List<Item> items;

        //생성자
        public Inventory(int capacity)
        {
            this.capacity = capacity;
            this.items = new List<Item>();
            Console.WriteLine("{0}칸짜리 가방이 생성되었습니다.", this.capacity);
        }
        //아이템 추가
        public void AddItem(Item item)
        {
            if(this.items.Count >= 3)
            {
                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;
        }

        //인벤토리 가방 몇개 들었는지 카운트
        public int Count()
        {
            int num = 0;
            for(int i = 0; i < this.items.Count; i++)
            {
                num++;
            }
            return num;
        }

        //모든 아이템 화면출력
        public void PrintAllItems()
        {
            for(int i = 0; i < this.items.Count; i++)
            {
                Item item = this.items[i];
                Console.Write("{0} ", item.data.name);
            }
            Console.WriteLine("\n");
        }
    }
}