Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- uidesign
- IMGUI
- 유니티
- 이득우
- c++class
- 화살표 함수
- 셰이더
- 그림자 효과
- premake5
- 3차원배열
- 가변배열
- swipe
- 렌더몽키
- 파이썬
- 화살표 메서드
- python
- 게임만들기
- 화살피하기
- visualstudio2022
- 이득우언리얼
- 공부
- 언리얼
- rendermonkey
- c#
- 배열문제
- C++
- 표창던지기
- Unity
- 비주얼스튜디오
- 다중상속
Archives
- Today
- Total
신입 개발자 공부 과정
1/11 - (테이블만들기, Json변환, 파일읽고쓰기, 직렬화, 역직렬화, 사전넣기, 싱글톤만들기) 본문
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class Program
{
static void Main(string[] args)
{
new App();
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class App
{
public App()
{
DataManager.GetInstance().LoadDatas();
Console.WriteLine("**********");
Console.WriteLine("**Diablo**");
Console.WriteLine("***start!**");
Console.WriteLine("**********");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class WeaponData
{
public int id;
public string name;
public int grade;
public float damage;
public int sellPrice;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class CharacterData
{
public int id;
public string name;
public float maxLife;
public float maxMana;
public float maxStamina;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class MonsterData
{
public int id;
public string name;
public int grade;
public float damage;
public float maxHp;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Diablo
{
class DataManager
{
//dictionary
private Dictionary<int, CharacterData> dicCharacterDatas = new Dictionary<int, CharacterData>();
private Dictionary<int, WeaponData> dicWeaponDatas = new Dictionary<int, WeaponData>();
private Dictionary<int, MonsterData> dicMonsterDatas = new Dictionary<int, MonsterData>();
//singletone
private static DataManager instance;
private const string DATA_PATH = "./Datas";
private DataManager()
{
}
public static DataManager GetInstance()
{
if (DataManager.instance == null) DataManager.instance = new DataManager();
return DataManager.instance;
}
//-----------------------------
public void LoadDatas()
{
//캐릭터
string path = string.Format("{0}/{1}", DATA_PATH, "character_data.json");
string json = File.ReadAllText(path);
CharacterData[] characterDatas = JsonConvert.DeserializeObject<CharacterData[]>(json);
foreach(var data in characterDatas)
{
this.dicCharacterDatas.Add(data.id, data);
}
//무기
path = string.Format("{0}/{1}", DATA_PATH, "weapon_data.json");
json = File.ReadAllText(path);
WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
foreach (var data in weaponDatas)
{
this.dicWeaponDatas.Add(data.id, data);
}
//몬스터
path = string.Format("{0}/{1}", DATA_PATH, "monster_data.json");
json = File.ReadAllText(path);
MonsterData[] monsterDatas = JsonConvert.DeserializeObject<MonsterData[]>(json);
foreach (var data in monsterDatas)
{
this.dicMonsterDatas.Add(data.id, data);
}
Console.WriteLine("데이터를 불러오는 중");
Console.WriteLine("모든 데이터를 로드 했습니다.");
Console.WriteLine("캐릭터 데이터{0}개", this.dicCharacterDatas.Count);
Console.WriteLine("무기 데이터{0}개", this.dicWeaponDatas.Count);
Console.WriteLine("몬스터 데이터{0}개", this.dicMonsterDatas.Count);
}
}
}
-------------------
캐릭터 선택, 무기 지급, 대사
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Diablo
{
public enum eCharacterType
{
None,
BARBARIAN,
AMAZON,
SOSURISE,
PALADINE
}
class App
{
public App()
{
DataManager.GetInstance().LoadDatas();
Console.WriteLine("**********");
Console.WriteLine("**Diablo**");
Console.WriteLine("***start!**");
Console.WriteLine("**********");
//용사여 처음오셨군요
CharacterData[] characterDatas = DataManager.GetInstance().GetCharacterDatas();
for (int i = 0; i < characterDatas.Length; i++)
{
var data = characterDatas[i];
int idx = i + 1;
Console.WriteLine("{0}. {1}", idx, data.name);//1.바바리안~4.팔라딘
}
//1.바바리안
//2.아마존
//3.소서리스
//4.팔라딘
//캐릭터 선택해주세요(숫자1~4):1
//Console.WriteLine("1.바바리안\n2.아마존\n3.소서리스\n4.팔라딘");
Console.Write("캐릭터 선택해주세요(숫자1~4):");
string input = Console.ReadLine();
int num = int.Parse(input);
CharacterData selectedCharacterData = characterDatas[num-1];//캐릭터 선택 후 맨트
Console.WriteLine("NPC:환영합니다 {0} 용사님.", selectedCharacterData.name);
Console.WriteLine("NPC:무기를 드리겠습니다.");
eCharacterType characterType = (eCharacterType)num;//캐릭터 선택하면 무기 출력
//무기 가져오기
WeaponData weaponData = DataManager.GetInstance().GetWeapoponData(selectedCharacterData.id);//선택한 캐릭터 ID를 넣으면 무기 가져오기
Weapon defaultWeapon = new Weapon(weaponData.id);
Console.WriteLine("{0}을 획득했습니다", weaponData.name);
//대사
if(characterType == eCharacterType.PALADINE)
{
Console.WriteLine("저 팔라딘인데...");
Console.WriteLine(".");
Console.WriteLine(".");
Console.WriteLine(".");
Console.WriteLine("NPC:대장장이가 휴가라서...");
}
//바바리안님 환영합니다
//장검을 획득했습니다
//장검을 착용했습니다
//당신은 필드로 나갑니다
//당신은 고블린무리를 발견 했습니다
//명령어를 입력해주세요(<대상> 쳐, 도망, 소지품, 저장) : 고블린 쳐
//당신은 고블린을 공격했습니다
//고블린은 당신을 공격했습니다
//고블린이 죽었습니다
//고블린이 골드10을 드랍했습니다
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class CharacterData
{
public int id;
public string name;
public float maxLife;
public float maxMana;
public float maxStamina;
public int defaultWeaponId;
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using Newtonsoft.Json;
namespace Diablo
{
class DataManager
{
//dictionary
private Dictionary<int, CharacterData> dicCharacterDatas = new Dictionary<int, CharacterData>();
private Dictionary<int, WeaponData> dicWeaponDatas = new Dictionary<int, WeaponData>();
private Dictionary<int, MonsterData> dicMonsterDatas = new Dictionary<int, MonsterData>();
//singletone
private static DataManager instance;
private const string DATA_PATH = "./Datas";
private DataManager()
{
}
public static DataManager GetInstance()
{
if (DataManager.instance == null) DataManager.instance = new DataManager();
return DataManager.instance;
}
//-----------------------------
public void LoadDatas()
{
//캐릭터
string path = string.Format("{0}/{1}", DATA_PATH, "character_data.json");
string json = File.ReadAllText(path);
CharacterData[] characterDatas = JsonConvert.DeserializeObject<CharacterData[]>(json);
foreach(var data in characterDatas)
{
this.dicCharacterDatas.Add(data.id, data);
}
//무기
path = string.Format("{0}/{1}", DATA_PATH, "weapon_data.json");
json = File.ReadAllText(path);
WeaponData[] weaponDatas = JsonConvert.DeserializeObject<WeaponData[]>(json);
foreach (var data in weaponDatas)
{
this.dicWeaponDatas.Add(data.id, data);
}
//몬스터
path = string.Format("{0}/{1}", DATA_PATH, "monster_data.json");
json = File.ReadAllText(path);
MonsterData[] monsterDatas = JsonConvert.DeserializeObject<MonsterData[]>(json);
foreach (var data in monsterDatas)
{
this.dicMonsterDatas.Add(data.id, data);
}
Console.WriteLine("데이터를 불러오는 중");
Console.WriteLine("모든 데이터를 로드 했습니다.");
Console.WriteLine("캐릭터 데이터{0}개", this.dicCharacterDatas.Count);
Console.WriteLine("무기 데이터{0}개", this.dicWeaponDatas.Count);
Console.WriteLine("몬스터 데이터{0}개", this.dicMonsterDatas.Count);
}
public CharacterData[] GetCharacterDatas()
{
return this.dicCharacterDatas.Values.ToArray();//Values 넣어줘야
}
public WeaponData GetWeapoponData(int characterId)//무기ID를 받아서 캐릭터의 무기를 지급
{
var characterData = this.dicCharacterDatas[characterId];//딕셔네리값의 캐릭터 아이디로 캐릭터 정보를 불러와서
var weaponData = this.dicWeaponDatas[characterData.defaultWeaponId];//캐릭터 정보 안의 무기 정보를 구한다
return weaponData;
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Diablo
{
class Weapon
{
private int id;
public Weapon(int id)
{
this.id = id;
}
}
}
-----------------
텍스트 컬러입히기
// Test colors with blue background, white foreground.
Console.BackgroundColor = ConsoleColor.Blue;
Console.ForegroundColor = ConsoleColor.White;
Console.Write(weaponData.name);
Console.ResetColor();
'C# > 수업 내용' 카테고리의 다른 글
1/17 Unity - 게임 기획/유니티 교과서 룰렛만들기 (0) | 2022.01.17 |
---|---|
c# out, ref, Int32.TryParse,TryParse(String, Int32) 과 (0) | 2022.01.12 |
1/10 - dictionary2 / 디자인 패턴(싱글톤) (0) | 2022.01.10 |
01/06 과제 (0) | 2022.01.07 |
Dictionary (0) | 2022.01.06 |