using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class App
{
public App()
{
GameStart();
}
public void GameStart()
{
Inventory inven = new Inventory(5);
GenericInventory inven2 = new GenericInventory(5);
Dictionary<int, MonsterData> dicMonsterdatas = new Dictionary<int, MonsterData>();
Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
DataManager.Instance.LoadItemDatas();
DataManager.Instance.LoadMonsterDatas();
Console.WriteLine("플레이어의 이름을 입력하세요: ");
string heroName = Console.ReadLine();
Hero hero = new Hero(heroName);
while (true)
{
Console.Clear();
Console.WriteLine("[플레이어 사냥 시뮬레이터]");
Console.WriteLine("----------------------------------");
Console.WriteLine("[몬스터 목록]");
Console.WriteLine("(1) 고블린");
Console.WriteLine("(2) 오우거");
Console.WriteLine("(3) 트 롤");
Console.WriteLine("----------------------------------");
Console.WriteLine("(4) 인벤토리 열기");
Console.WriteLine("(5) 아이템 꺼내기");
Console.WriteLine("----------------------------------");
Console.WriteLine("[상태창]");
Console.WriteLine("이름: {0}", heroName);
Console.WriteLine("체력: {0}", hero.heroHp);
Console.WriteLine("공격력: {0}", hero.heroDmg);
Console.WriteLine("현재 무기: ");
Console.WriteLine("----------------------------------");
Console.Write("번호를 입력하세요: ");
int num = Convert.ToInt32(Console.ReadLine());
switch (num)
{
case 1:
Console.WriteLine("고블린을 사냥합니다.");
Monster goblin = new Monster(DataManager.Instance.GetMonster(1000));
Console.WriteLine("고블린을 사냥했습니다.");
Item gItem = new Item(DataManager.Instance.GetItem(goblin.data.item_id));
Console.WriteLine("{0}을 획득하셨습니다.", gItem.data.name);
inven2.AddItem(gItem);
Console.WriteLine("계속하려면 아무 키나 누르십시오 . . .");
Console.ReadKey();
break;
case 2:
Console.WriteLine("오우거을 사냥합니다.");
Monster ogre = new Monster(DataManager.Instance.GetMonster(1001));
Console.WriteLine("고블린을 사냥했습니다.");
Item oItem = new Item(DataManager.Instance.GetItem(ogre.data.item_id));
Console.WriteLine("{0}을 획득하셨습니다.", oItem.data.name);
inven2.AddItem(oItem);
Console.WriteLine("계속하려면 아무 키나 누르십시오 . . .");
Console.ReadKey();
break;
case 3:
Console.WriteLine("고블린을 사냥합니다.");
Monster troll = new Monster(DataManager.Instance.GetMonster(1002));
Console.WriteLine("고블린을 사냥했습니다.");
Item tItem = new Item(DataManager.Instance.GetItem(troll.data.item_id));
Console.WriteLine("{0}을 획득하셨습니다.", tItem.data.name);
inven2.AddItem(tItem);
Console.WriteLine("계속하려면 아무 키나 누르십시오 . . .");
Console.ReadKey();
break;
case 4:
inven2.DisplayInventory();
Console.WriteLine("계속하려면 아무 키나 누르십시오 . . .");
Console.ReadKey();
break;
case 5:
Console.Write("꺼낼 아이템의 이름을 입력해주세요: ");
string iName = Console.ReadLine();
if(iName == "장검")
{
inven2.setItem<Item>(DataManager.Instance.GetItem(100).id);
Console.WriteLine("장검을 인벤토리에서 찾았습니다.");
Console.WriteLine("장검을 인벤토리에서 꺼냅니다.");
}
else if(iName == "단검")
{
//inven.setItem(dic[101].id);
inven2.setItem<Item>(DataManager.Instance.GetItem(101).id);
Console.WriteLine("단검을 인벤토리에서 꺼냈습니다.");
Console.WriteLine("단검을 인벤토리에서 꺼냅니다.");
}
else if (iName == "활")
{
//inven.setItem(dic[102].id);
inven2.setItem<Item>(DataManager.Instance.GetItem(102).id);
Console.WriteLine("활을 인벤토리에서 꺼냈습니다.");
Console.WriteLine("활을 인벤토리에서 꺼냅니다.");
}
else if (iName == "도끼")
{
//inven.setItem(dic[103].id);
inven2.setItem<Item>(DataManager.Instance.GetItem(103).id);
Console.WriteLine("도끼을 인벤토리에서 꺼냈습니다.");
Console.WriteLine("도끼을 인벤토리에서 꺼냅니다.");
}
else
{
Console.WriteLine("유효한 입력이 아닙니다");
}
Console.WriteLine("계속하려면 아무 키나 누르십시오 . . .");
Console.ReadKey();
break;
}
}
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class DataManager
{
public static readonly DataManager Instance = new DataManager();
Dictionary<int, ItemData> dic = new Dictionary<int, ItemData>();
Dictionary<int, MonsterData> dicMonsterdatas = new Dictionary<int, MonsterData>();
private DataManager() { }
public void LoadItemDatas()
{
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));
}
public void LoadMonsterDatas()
{
dicMonsterdatas.Add(1000, new MonsterData(1000, "고블린", 100, 15, 6));
dicMonsterdatas.Add(1001, new MonsterData(1001, "오우거", 101, 30, 15));
dicMonsterdatas.Add(1002, new MonsterData(1002, "트롤", 102, 50, 25));
}
public ItemData GetItem(int id)
{
return this.dic[id];
}
public MonsterData GetMonster(int id)
{
return this.dicMonsterdatas[id];
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class GenericInventory
{
private List<Item> items;
int capacity;
//생성자
public GenericInventory(int capacity)
{
this.capacity = capacity;
this.items = new List<Item>(capacity);
}
public void AddItem(Item item)
{
this.items.Add(item);
Console.WriteLine("{0}을(를) 획득했습니다.", item.data.name);
}
public T setItem<T>(int id) where T : Item
{
for (int i = 0; i < this.items.Count; i++)
{
var item = this.items[i];
if (item.data.id == id)
{
this.items.Remove(item);
return (T)item;
}
}
return null;
}
public void DisplayInventory()
{
Console.WriteLine("----------------------------------");
Console.WriteLine("<인벤토리 목록>");
for (int i = 0; i < this.items.Count; i++)
{
Console.WriteLine("[{0}]", items[i].data.name);
}
Console.WriteLine("----------------------------------");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class Hero
{
string heroName;
public int heroHp=100;
public int heroDmg=10;
enum weaponType
{
LongSword = 0,
ShortSword =1,
}
public Hero(string name)
{
this.heroName= name;
}
}
}
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class Inventory
{
List<Item> items;
int capacity;
public Inventory(int capacity)
{
this.capacity = capacity;
items = new List<Item>(capacity);
//Console.WriteLine("{0}칸짜리 가방이 생성되었습니다.", this.capacity);
}
public void AddItem(Item item)
{
this.items.Add(item);
Console.WriteLine("{0}가 인벤토리에 추가되었습니다.",item.data.name);
}
public Item setItem(int id)
{
for(int i=0; i<items.Count; i++)
{
Item item = this.items[i];
if(item.data.id == id)
{
Console.WriteLine("{0}를 인벤토리에서 꺼냅니다.", item.data.name);
this.items.Remove(item);
return item;
}
}
return null;
}
public void DisplayInventory()
{
Console.WriteLine("----------------------------------");
Console.WriteLine("<인벤토리 목록>");
for(int i=0;i<this.items.Count;i++)
{
Console.WriteLine("[{0}]", items[i].data.name);
}
Console.WriteLine("----------------------------------");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class Item
{
public ItemData data
{
get;
private set;
}
public Item(ItemData data)
{
this.data = data;
}
public string GetName()
{
return this.data.name;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
//아이템의 정보
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;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class Monster
{
public MonsterData data
{
get;
private set;
}
public Monster(MonsterData data)
{
this.data = data;
}
public string GetName()
{
return this.data.name;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class MonsterData
{
public int id;
public string name;
public int item_id;
public int monsterHP;
public int monsterDmg;
public MonsterData(int id, string name, int item_id, int monsterHP, int monsterDmg)
{
this.id = id;
this.name = name;
this.item_id = item_id;
this.monsterHP = monsterHP;
this.monsterDmg = monsterDmg;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp13
{
internal class Program
{
static void Main(string[] args)
{
new App();
}
}
}
'KDT > C# 프로그래밍' 카테고리의 다른 글
싱글톤 패턴으로 대리자 호출하기(2) (0) | 2023.07.27 |
---|---|
싱글톤 패턴으로 대리자 호출하기 (0) | 2023.07.27 |
<Dictionary> 왜 검색이 빠른가? (0) | 2023.07.26 |
싱글톤 패턴 (0) | 2023.07.26 |
디자인 패턴 (0) | 2023.07.26 |