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

+ Recent posts