using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using System.IO;
namespace ConsoleApp18
{
internal class App
{
private Game game;
public App()
{
DataManager.instance.LoadMonsterDatas();
DataManager.instance.LoadItemDatas();
this.game = new Game();
this.game.Start();
}
}
}
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.IO;
namespace ConsoleApp18
{
public class DataManager
{
public static readonly DataManager instance = new DataManager();
private Dictionary<int, ItemData> dicItemDatas = new Dictionary<int, ItemData>();
private Dictionary<int, MonsterData> dicMonsterDatas;
private DataManager() { }
public void LoadItemDatas()
{
var json = File.ReadAllText("./item_data.json");
Console.WriteLine(json);
ItemData[] itemDatas = JsonConvert.DeserializeObject<ItemData[]>(json);
foreach (var data in itemDatas)
{
dicItemDatas.Add(data.id, data);
Console.WriteLine("아이템 데이터 로드 완료: {0}", dicItemDatas.Count);
}
}
public void LoadMonsterDatas()
{
var json = File.ReadAllText("./monster_data.json");
Console.WriteLine(json);
MonsterData[] monsterDatas = JsonConvert.DeserializeObject<MonsterData[]>(json);
//foreach (var data in monsterDatas)
//{
// dicMonsterDatas.Add(data.id, data);
// Console.WriteLine("아이템 데이터 로드 완료: {0}", dicItemDatas.Count);
//}
dicMonsterDatas = monsterDatas.ToDictionary(x => x.id);
Console.WriteLine("몬스터 데이터 로드 완료: {0}", dicMonsterDatas.Count);
}
public MonsterData GetMonsterData(int id)
{
return this.dicMonsterDatas[id];
}
public ItemData GetItemData(int id)
{
return this.dicItemDatas[id];
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class Game
{
private Hero hero;
private Monster monster;
public Game()
{
}
public void Start()
{
Console.WriteLine("게임 시작");
this.hero = this.CreateHero("홍길동",3);
this.monster = this.CreateMonster(1000);
this.monster.onDie = () =>
{
Console.WriteLine("몬스터가 죽었습니다.");
//아이템 생성
int itemId = this.monster.GetItemId();
Item loot = this.CreateItem(itemId);
//아이템 획득
Console.WriteLine("몬스터를 물리치고 아이템 ({0}) {1}을 획득했습니다.", loot.GetID(),loot.Name);
this.hero.SetItem(loot);
int itemCount = this.hero.GetItemCount();
Console.WriteLine(itemCount);
};
//가방 만들어서 영웅에게 지급
Inventory bag = new Inventory(5);
this.hero.SetBag(bag);
//영웅이 몬스터를 공격
Item item = this.CreateItem(100);
this.hero.SetItem(item);
this.hero.Equip(100);
this.hero.Attack(this.monster);
}
private Item CreateItem(int id)
{
ItemData data = DataManager.instance.GetItemData(id);
return new Item(data);
}
public Hero CreateHero(string name, int damage)
{
return new Hero(name,damage);
}
public Monster CreateMonster(int id)
{
MonsterData data = DataManager.instance.GetMonsterData(id);
return new Monster(data);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class Hero
{
private string name;
private int damage;
private Inventory bag;
private Item leftHandItem;
public Hero(string name, int damage) {
this.name = name;
this.damage = damage;
Console.WriteLine("영웅 생성 이름: {0}, 공격력: {1}",this.name,this.damage);
}
public void SetBag(Inventory bag)
{
this.bag = bag;
Console.WriteLine("가방({0})을 지급 받았습니다.", this.bag);
}
public void SetItem(Item item)
{
this.bag.AddItem(item);
}
public void Equip(int id)
{
if (this.bag.Exist(id))
{
this.leftHandItem = this.bag.GetItem(id);
Console.WriteLine("왼손에 아이템({0})을 착용 했습니다.", leftHandItem.Name);
}
else
{
Console.WriteLine("아이템({0})을 찾을 수 없습니다.");
}
}
public void Attack(Monster monster)
{
monster.TakeDamage(this.damage);
}
public int GetItemCount()
{
return this.bag.Count;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class Inventory
{
private int capacity;
private List<Item> items = new List<Item>();
public int Count
{
get
{
return items.Count;
}
}
public Inventory(int capacity) {
this.capacity = capacity;
}
public void AddItem(Item item)
{
this.items.Add(item);
Console.WriteLine("{0}, {1}이 가방에 들어갔습니다.",item.GetID(), item.Name);
}
public bool Exist(int id)
{
Item item = this.items.Find(x => x.GetID() == id);
if(item ==null) return false;
else return true;
//for(int i=0;i<this.items.Count;i++)
//{
// if (this.items[i].GetID() == id)
// {
// Console.WriteLine("찾았습니다.");
// return true;
// }
// return false;
//}
}
public Item GetItem(int id)
{
//return this.item.Find(x => x.GetID() == id);
Item foundItem = null;
for (int i = 0; i< this.items.Count; i++)
{
if (this.items[i].GetID() == id)
{
foundItem = this.items[i];
}
}
return foundItem;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class Item
{
private ItemData data;
public string Name
{
get
{
return this.data.name;
}
}
public Item(ItemData data)
{
this.data = data;
}
public int GetID()
{
return this.data.id;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class ItemData
{
public int id;
public string name;
public int damage;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class Monster
{
private MonsterData data;
private int maxHp;
private int hp;
public Action onDie;
public Monster(MonsterData data) {
this.data = data;
this.maxHp = this.data.maxHp;
this.hp = this.maxHp;
//Console.WriteLine("id: {0}, maxHp: {1}", this.data.id, this.data.maxHp);
Console.WriteLine("id {0}, 체력: {1}/{2}",this.data.id,this.hp,this.maxHp);
}
public void TakeDamage(int damage)
{
this.hp -= damage*1000;
if(this.hp <= 0)
{
this.hp = 0;
}
Console.WriteLine("공격을 받았습니다.체력: ({0}/{1})", this.hp, this.maxHp);
if (this.hp <= 0)
{
if (this.onDie != null)
{
this.onDie();
}
}
}
public int GetItemId()
{
return this.data.item_id;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
public class MonsterData
{
public int id;
public string name;
public int item_id;
public int maxHp;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp18
{
internal class Program
{
static void Main(string[] args)
{
new App();
}
}
}

반응형
'KDT > C# 프로그래밍' 카테고리의 다른 글
몬스터 사냥 시뮬레이터 + 미션창 만들기 (1) | 2023.07.31 |
---|---|
신규 유저와 기존 유저 (0) | 2023.07.28 |
아이템 정보 저장하기 (0) | 2023.07.27 |
대리자 연습(3) (0) | 2023.07.27 |
대리자 연습(2) (0) | 2023.07.27 |