현재 내배캠에서 C# 콘솔 창에서 돌아가는 텍스트 게임을 만들고 있는 중이다.
최대한 이번에 배운 C# 문법들을 사용하려고 노력 중이다... 하지만 뱁새가 황새를 따라가면 가랑이가 찢어진다고 했던가, 내가 쓴 코드지만 카오스 그 자체인듯 하다...
아무튼, 제아무리 뱁새같은 코드라고 하더라도 오늘 새롭게 배운 점은 있다.
📖 xml 파일 읽기!
플레이어가 장착할 수 있는 장비들을 class Equipment
로 선언하고, 해당 장비들을 파일에 저장했다가 게임이 시작되면서 클래스를 생성해주는 방법을 찾아보았다.
내가 사용한 방법은 Equipment[] equipments
라는 배열을 생성해 xml 파일을 읽어서 foreach문을 통해 넣어주는 방법을 사용했다.
// 전역 변수로 equipments를 선언했다.
static Equipment[] equipments = new Equipment[6];
...
static public void GetEquipmentXml()
{
XmlDocument xdoc = new XmlDocument();
// xml 파일 읽기
xdoc.Load(@"C:\Users\사용자\Desktop\Coding\C#\Text_Dungeon\Equipment.xml");
// foreach문을 돌릴 노드 설정
XmlNodeList nodes = xdoc.SelectNodes("/Item/Equipment");
int i = 0;
foreach (XmlNode e in nodes)
{
// equipments[] 배열 할당
equipments[i] = new Equipment();
equipments[i].name = e.SelectSingleNode("name").InnerText;
equipments[i].equipmentStats = e.SelectSingleNode("equipmentStats").InnerText;
equipments[i].stats = int.Parse(e.SelectSingleNode("stats").InnerText);
equipments[i].canon = e.SelectSingleNode("canon").InnerText;
equipments[i].price = int.Parse(e.SelectSingleNode("price").InnerText);
equipments[i].IsOutOfStock = bool.Parse(e.SelectSingleNode("IsOutOfStock").InnerText);
equipments[i].IsEquipped = bool.Parse(e.SelectSingleNode("IsEquipped").InnerText);
i++;
}
}
Equipment.xml
<?xml version="1.0" encoding="utf-8"?>
<Item>
<Equipment>
<name>수련자 갑옷</name>
<equipmentStats>방어력</equipmentStats>
<stats>5</stats>
<canon>수련에 도움을 주는 갑옷입니다.</canon>
<price>1000</price>
<IsOutOfStock>false</IsOutOfStock>
<IsEquipped>false</IsEquipped>
</Equipment>
<Equipment>
<name>무쇠갑옷</name>
<equipmentStats>방어력</equipmentStats>
<stats>9</stats>
<canon>무쇠로 만들어져 튼튼한 갑옷입니다.</canon>
<price>2100</price>
<IsOutOfStock>true</IsOutOfStock>
<IsEquipped>true</IsEquipped>
</Equipment>
<Equipment>
<name>스파르타의 갑옷</name>
<equipmentStats>방어력</equipmentStats>
<stats>15</stats>
<canon>스파르타의 전사들이 사용했다는 전설의 갑옷입니다.</canon>
<price>2100</price>
<IsOutOfStock>false</IsOutOfStock>
<IsEquipped>false</IsEquipped>
</Equipment>
<Equipment>
<name>낡은 검</name>
<equipmentStats>공격력</equipmentStats>
<stats>2</stats>
<canon>쉽게 볼 수 있는 낡은 검입니다.</canon>
<price>600</price>
<IsOutOfStock>true</IsOutOfStock>
<IsEquipped>false</IsEquipped>
</Equipment>
<Equipment>
<name>청동 도끼</name>
<equipmentStats>공격력</equipmentStats>
<stats>5</stats>
<canon>어디선가 사용됐던거 같은 도끼입니다.</canon>
<price>1500</price>
<IsOutOfStock>false</IsOutOfStock>
<IsEquipped>false</IsEquipped>
</Equipment>
<Equipment>
<name>스파르타의 창</name>
<equipmentStats>공격력</equipmentStats>
<stats>7</stats>
<canon>스파르타의 전사들이 사용했다는 전설의 창입니다.</canon>
<price>3200</price>
<IsOutOfStock>true</IsOutOfStock>
<IsEquipped>true</IsEquipped>
</Equipment>
</Item>
equipments 배열 읽기
// 현재 IsOutOfStock = true인 Equipments들을 호출하기
foreach (var e in equipments)
{
if (e.IsOutOfStock)
{
Console.WriteLine($"- {(e.IsEquipped ? "[E]" : "")}{e.name,-10}| {e.equipmentStats} +{e.stats} | {e.canon}");
}
}
참고한 사이트
https://hengs.tistory.com/72
오늘은 C# 문법 5주차까지 들었다. 마치 태산과도 같은 코딩의 벽을 느꼈다... 개발자분들은 다 괴물인건가??
하지만 이제는 물러설 수 없다. 취업을 위해서라면 해야하는 것들이다. 언제까지고 미룰 수 없는 노릇이니 이번 기회에 마음 독하게 먹고 노력하자!
귀여운 흰머리 오목눈이...