ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 텍스트 Rpg만들기
    C#/수업과제 2022. 6. 21. 18:00
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Newtonsoft.Json;
    using System.IO;
    
    namespace Study09
    {
        public class Game
        {
            private Character user;
            public Game()
            {
                this.LoadDatas();
    
                if (this.IsNewbie())
                {
                    this.CreateCharacter();
                }
                else
                {
                    Character character = new Character(this.LoadCharacterInfo());
                    user = character;
                }
                user.DisplayStatus();
    
                user.GetExp(20);
                user.GetExp(30);
                user.GetExp(40);
                this.Save(user.CreateCharacterInfo());
            }
    
            private void LoadDatas()
            {
                DataManager.instance.LoadJobDatas();
                DataManager.instance.LoadRequireExpDatas();
            }
    
            private bool IsNewbie()
            {
                return !File.Exists("./character_info.json");
            }
    
            private void CreateCharacter()
            {
                Console.WriteLine("환영합니다. 용사님.");
                Console.WriteLine("닉네임을 입력해주세요.");
                string inputName = Console.ReadLine();
                Console.WriteLine();
                Console.WriteLine("반갑습니다. {0}님", inputName);
                Console.WriteLine("직업번호를 선택해주세요. (0):전사 (1):마법사 (2):도적");
                int inputJob = Convert.ToInt32(Console.ReadLine());
                if (inputJob == 1 || inputJob == 2 || inputJob == 3)
                {
                    Character.eJob job = (Character.eJob)inputJob;
                    Character user = new Character(inputName, job);
                    Console.WriteLine("{0}님의 직업은 {1}로 선택되었습니다.", inputName, user.GetStringJob());
                    this.user = user;
                }
                else
                {
                    Console.WriteLine("잘못된 값이 입력되었습니다.");
                    Console.WriteLine("캐릭터를 다시 생성합니다.");
                    Console.WriteLine("----------------------------------------");
                    this.CreateCharacter();
                }
            }
    
            private void Save(CharacterInfo info)
            { string json = JsonConvert.SerializeObject(info);
                File.WriteAllText("./character_info.json", json);
                Console.WriteLine("Save Complete!");
            }
    
            private CharacterInfo LoadCharacterInfo()
            {
                string json = File.ReadAllText("./character_info.json");
                return JsonConvert.DeserializeObject<CharacterInfo>(json);
            }
    
    
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.IO;
    using Newtonsoft.Json;
    
    namespace Study09
    {
        public sealed class DataManager
        {
            public static readonly DataManager instance = new DataManager();
    
            private Dictionary<int, JobData> dicJobs;
            private Dictionary<int, RequireExpData> dicRequireExp;
            private DataManager()
            { 
            
            }
    
            public void LoadJobDatas()
            {
                string json_JobDatas = File.ReadAllText("./job_data.json");
                JobData[] arrJobDatas = JsonConvert.DeserializeObject<JobData[]>(json_JobDatas);
                this.dicJobs = arrJobDatas.ToDictionary(x => x.id);
            }
    
            public void LoadRequireExpDatas()
            {
                string json_RequireExpDatas = File.ReadAllText("./require_exp_data.json");
                RequireExpData[] arrRequireExpDatas = JsonConvert.DeserializeObject<RequireExpData[]>(json_RequireExpDatas);
                this.dicRequireExp = arrRequireExpDatas.ToDictionary(x => x.id);
            
            }
    
            public JobData GetCharacterDataByJob(Character.eJob job)
            {
                int intJob = (int)job;
                JobData data = this.dicJobs.Values.Where(x => x.job == intJob).First();
                return data;
            }
    
            public int GetRequireExpDataByLevel(int level)
            {
                RequireExpData requireExp = this.dicRequireExp.Values.Where(x => x.level == level).First();
                return requireExp.require_exp;
            }
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study09
    {
        public class JobData
        {
            public int id;
            public int job;
            public float max_hp;
            public float damage;
        }
    }

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study09
    {
        public class RequireExpData
        {
            public int id;
            public int level;
            public int require_exp;
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study09
    {
        public class Character
        {
            public class UpdateStatusEventArgs : EventArgs
            {
                public CharacterInfo Info { get; set; }
            }
            public event EventHandler<UpdateStatusEventArgs> onUpdateStatus;
            public enum eJob { Warrior, Wizard, Thief }
            private CharacterInfo info;
            public Character(string name, eJob job)
            {
                this.info = new CharacterInfo();
                this.info.Name = name;
                this.info.Job = (CharacterInfo.eJob)Convert.ToInt32(job);
                this.info.Level = 1;
                JobData data = DataManager.instance.GetCharacterDataByJob(job);
                this.info.Damage = data.damage;
                this.info.MaxHp = data.max_hp;
                this.info.Hp = this.info.MaxHp;
                this.info.Exp = 0;
                this.info.Require_Exp = DataManager.instance.GetRequireExpDataByLevel(this.info.Level);
            }
    
            public Character(CharacterInfo info)
            {
                this.info = info;
            }
    
            public void DisplayStatus()
            {
                Console.WriteLine("-----------------------------------------");
                Console.WriteLine("이름 : {0}",this.info.Name);
                Console.WriteLine("직업 : {0}",this.GetStringJob());
                Console.WriteLine("레벨 : {0}", this.info.Level);
                Console.WriteLine("경험치 : ({0} / {1}), {2}%", this.info.Exp, this.info.Require_Exp, ((float)this.info.Exp/this.info.Require_Exp)*100);
                Console.WriteLine("체력 : ({0} / {1})",this.info.Hp,this.info.MaxHp);
                Console.WriteLine("데미지 : {0}",this.info.Damage);
                Console.WriteLine("-----------------------------------------");
            }
    
            public string GetStringJob()
            {
                if (this.info.Job == CharacterInfo.eJob.Warrior)
                    return "전사";
                if (this.info.Job == CharacterInfo.eJob.Wizard)
                    return "마법사";
                if (this.info.Job == CharacterInfo.eJob.Thief)
                    return "도적";
                else return "초보자";
            }
    
            public CharacterInfo CreateCharacterInfo()
            {
                return this.info;
            }
    
            private void DispatchUpdateStatusEvent()
            { if (this.onUpdateStatus != null)
                {
                    this.onUpdateStatus(this, new UpdateStatusEventArgs() { Info = this.info });
                }
            }
    
            public void CharacterHit(int damage)
            {
                this.info.Hp -= damage;
                this.DispatchUpdateStatusEvent();
                this.DisplayStatus();
            }
    
            public void GetExp(int exp)
            {
                if (this.info.Exp + exp < this.info.Require_Exp)
                {
                    this.info.Exp += exp;
                    this.DispatchUpdateStatusEvent();
                }
    
                else
                {
                    this.LevelUp(exp);
                    Console.WriteLine("레벨업 하셨습니다");
                }
                this.DisplayStatus();
            }
            public void LevelUp(int exp)
            {
                this.info.Exp = this.info.Exp + exp - this.info.Require_Exp;
                this.info.Level++;
                this.info.Damage++;
                this.info.MaxHp += 10;
                this.info.Hp = this.info.MaxHp;
                this.info.Require_Exp = DataManager.instance.GetRequireExpDataByLevel(this.info.Level);
            }
        }
    }

     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Study09
    {
        public class CharacterInfo
        {
            public enum eJob { Warrior, Wizard, Thief }
            public string Name;
            public eJob Job;
            public int Level;
            public float Damage;
            public int Require_Exp;
            public int Exp;
            public float Hp;
            public float MaxHp;
    
            public CharacterInfo()
            { }
        }
    }

    'C# > 수업과제' 카테고리의 다른 글

    데이터 저장 연습과제  (0) 2022.06.20
    2차원 배열의 늑대와 영웅  (0) 2022.06.15
    2048게임  (0) 2022.06.15
    for문 연습 문제  (0) 2022.06.10
    디아블로 아이템 출력하기  (0) 2022.06.09
Designed by Tistory.