TIL - 24.01.03

Amberjack·2024년 1월 3일
0

TIL

목록 보기
10/83

🫠 오늘 있었던 일

현재 내배캠에서 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주차까지 들었다. 마치 태산과도 같은 코딩의 벽을 느꼈다... 개발자분들은 다 괴물인건가??
하지만 이제는 물러설 수 없다. 취업을 위해서라면 해야하는 것들이다. 언제까지고 미룰 수 없는 노릇이니 이번 기회에 마음 독하게 먹고 노력하자!

귀여운 흰머리 오목눈이...

0개의 댓글