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");
}
}
}
'C#프로그래밍' 카테고리의 다른 글
과제 (0) | 2023.07.26 |
---|---|
디자인패턴/싱글톤패턴/DataManager, 개체 이니셜라이저 (0) | 2023.07.26 |
컬렉션 [제네릭 - List<T>, Dictonary <TKey, TValue>, Queue<T>, Stack<T>] (0) | 2023.07.26 |
namespace, 컬렉션[ArrayList, Hashtable, Stack, Queue] (0) | 2023.07.26 |
좌표, 인덱스, Utils, Vector2, Hero (0) | 2023.07.25 |