'오늘의 일에서 나는 어떤 것을 배웠는지' - 학습
텍스트 RPG 게임을 만들면서 C# 문법을 학습했다.
'오늘의 나는 무엇을 잘했는지' - 성취
구체적으로는, 다음 코드를 완성했다.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection.Metadata.Ecma335;
using System.IO;
using Systehttp://m.Text.Json;
using System.Numerics;
class Character
{
public string Name { get; set; }
public int Level { get; set; }
public string Job { get; set; }
public int Attack { get; set; }
public int Defense { get; set; }
public int Health { get; set; }
public int Gold { get; set; }
public int Exp { get; set; }
public int MaxExp { get; set; }
}
class Item
{
public string Name { get; set; }
public int AtkStat { get; set; }
public int DefStat { get; set; }
public string FlavorText { get; set; }
public int Price { get; set; }
public string Type { get; set; }
public bool IsPurchased { get; set; }
public bool IsEquipped { get; set; }
}
class Program
{
static void Main(string[] args)
{
Character player = LoadPlayerData();
List<Item> itemArray = LoadItemsData();
if (player == null || itemArray == null)
{
player = new Character
{
Name = "막시무스",
Level = 01,
Job = "검투사",
Attack = 10,
Defense = 5,
Health = 100,
Gold = 1500,
Exp = 0,
MaxExp = 1
};
itemArray = new List<Item>
{
new Item { Name = "흔한 검", AtkStat = 2, DefStat = 0, FlavorText = "초심자들의 친구", Price = 200, Type = "Weapon", IsPurchased = true, IsEquipped = true },
new Item { Name = "나무 방패", AtkStat = 0, DefStat = 9, FlavorText = "그럭저럭 쓸만하다", Price = 150, Type = "Armor", IsPurchased = true, IsEquipped = true },
new Item { Name = "전투 도끼", AtkStat = 10, DefStat = 0, FlavorText = "뚝배기 브레이커", Price = 1200, Type = "Weapon", IsPurchased = false, IsEquipped = false },
new Item { Name = "사슬 갑옷", AtkStat = 0, DefStat = 16, FlavorText = "가볍고 단단하다.", Price = 1000, Type = "Armor", IsPurchased = false, IsEquipped = false },
new Item { Name = "스톰 브링어", AtkStat = 20, DefStat = 0, FlavorText = "폭풍을 부른다고 전해지는 검", Price = 5000, Type = "Weapon", IsPurchased = false, IsEquipped = false },
new Item { Name = "강철 갑옷", AtkStat = 0, DefStat = 24, FlavorText = "강철로 만든 갑옷", Price = 4500, Type = "Armor", IsPurchased = false, IsEquipped = false },
new Item { Name = "빛나는 성검", AtkStat = 45, DefStat = 0, FlavorText = "눈부신 빛을 내는 전설의 성검", Price = 12000, Type = "Weapon", IsPurchased = false, IsEquipped = false },
new Item { Name = "미스릴 아머", AtkStat = 0, DefStat = 36, FlavorText = "절대 부서지지 않는 불멸의 갑옷", Price = 10000, Type = "Armor", IsPurchased = false, IsEquipped = false }
};
}
else
{
Console.WriteLine("[데이터 로드 성공.]\n");
}
List<Item> haveItemList = new List<Item>();
foreach (Item item in itemArray)
{
if (item.IsPurchased)
{
haveItemList.Add(item);
}
}
string roomManager = "robby_room";
bool running = true;
bool dungeon_choice_waiting = false;
while (running)
{
if (roomManager == "robby_room")
{
Console.WriteLine("\n[스파르타 마을에 오신 여러분 환영합니다.]");
Console.WriteLine("[이곳에서 던전으로 들어가기전 활동을 할 수 있습니다.]\n");
Console.WriteLine("1. 상태 보기");
Console.WriteLine("2. 인벤토리");
Console.WriteLine("3. 상점");
Console.WriteLine("4. 던전");
Console.WriteLine("5. 휴식\n");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
switch (userInput)
{
case 1:
roomManager = "status_room";
break;
case 2:
roomManager = "inventory_room";
break;
case 3:
roomManager = "shop_room";
break;
case 4:
roomManager = "dungeon_room";
break;
case 5:
roomManager = "rest_room";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else if (roomManager == "status_room")
{
DisplayCharacterStatus(player, haveItemList);
Console.WriteLine("0. 나가기\n");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
switch (userInput)
{
case 0:
roomManager = "robby_room";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else if (roomManager == "inventory_room")
{
Console.WriteLine("\n[인벤토리]");
Console.WriteLine("[보유 중인 아이템을 관리할 수 있습니다.]\n");
Console.WriteLine("[아이템 목록]");
for (int i = 0; i < haveItemList.Count; i++)
{
string equippedTag = haveItemList[i].IsEquipped ? "[E]" : "";
string itemType = haveItemList[i].Type == "Weapon" ? "공격력" : (haveItemList[i].Type == "Armor" ? "방어력" : "");
int itemStat = haveItemList[i].Type == "Weapon" ? haveItemList[i].AtkStat : (haveItemList[i].Type == "Armor" ? haveItemList[i].DefStat : 0);
Console.WriteLine($"- {equippedTag}{haveItemList[i].Name,-15} | {itemType} +{itemStat} | {haveItemList[i].FlavorText}");
}
Console.WriteLine("\n1. 장착관리");
Console.WriteLine("0. 나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
switch (userInput)
{
case 0:
roomManager = "robby_room";
break;
case 1:
roomManager = "equipping_item";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else if (roomManager == "equipping_item")
{
Console.WriteLine("\n[인벤토리 - 장착 관리]");
Console.WriteLine("[보유 중인 아이템을 관리할 수 있습니다.]\n");
Console.WriteLine("[아이템 목록]");
for (int i = 0; i < haveItemList.Count; i++)
{
Console.Write($"- {i + 1}");
string equippedTag = haveItemList[i].IsEquipped ? "[E]" : "";
string itemType = haveItemList[i].Type == "Weapon" ? "공격력" : (haveItemList[i].Type == "Armor" ? "방어력" : "");
int itemStat = haveItemList[i].Type == "Weapon" ? haveItemList[i].AtkStat : (haveItemList[i].Type == "Armor" ? haveItemList[i].DefStat : 0);
Console.WriteLine($" {equippedTag}{haveItemList[i].Name,-15} | {itemType} +{itemStat} | {haveItemList[i].FlavorText}");
}
Console.WriteLine("\n0. 나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
if (userInput == 0)
{
roomManager = "inventory_room";
}
else if (userInput >= 1 && userInput <= haveItemList.Count)
{
int selectedIndex = userInput - 1;
Item selectedItem = haveItemList[selectedIndex];
selectedItem.IsEquipped = !selectedItem.IsEquipped;
if (selectedItem.IsEquipped)
{
string itemType = selectedItem.Type;
foreach (Item item in haveItemList.Where(item => item.Type == itemType && item != selectedItem && item.IsEquipped))
{
item.IsEquipped = false;
}
}
}
else
{
Console.WriteLine("[잘못된 입력입니다.]\n");
}
}
else if (roomManager == "shop_room")
{
Console.WriteLine("\n[상점]");
Console.WriteLine("[필요한 아이템을 얻을 수 있는 상점입니다.]\n");
Console.WriteLine($"[보유 골드]\n{player.Gold} G");
Console.WriteLine("\n[아이템 목록]");
for (int i = 0; i < itemArray.Count; i++)
{
string purchaseStatus = itemArray[i].IsPurchased ? "구매완료" : $"{itemArray[i].Price} G";
Console.WriteLine($"- {itemArray[i].Name,-15} | {GetItemStatInfo(itemArray[i])} | {itemArray[i].FlavorText,-45} | {purchaseStatus}");
}
Console.WriteLine("\n1. 아이템 구매");
Console.WriteLine("2. 아이템 판매");
Console.WriteLine("0. 나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
switch (userInput)
{
case 0:
roomManager = "robby_room";
break;
case 1:
roomManager = "buying_item";
break;
case 2:
roomManager = "selling_item";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else if (roomManager == "buying_item")
{
Console.WriteLine("\n[상점 - 아이템 구매]");
Console.WriteLine("[아이템 번호를 입력하면 아이템을 구매할 수 있습니다.]\n");
Console.WriteLine($"[보유 골드]\n{player.Gold} G");
Console.WriteLine("\n[아이템 목록]");
for (int i = 0; i < itemArray.Count; i++)
{
string purchaseStatus = itemArray[i].IsPurchased ? "구매완료" : $"{itemArray[i].Price} G";
Console.WriteLine($"- {i + 1}. {itemArray[i].Name,-15} | {GetItemStatInfo(itemArray[i])} | {itemArray[i].FlavorText,-45} | {purchaseStatus}");
}
Console.WriteLine("\n0. 나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
if (userInput == 0)
{
roomManager = "shop_room";
}
else if (userInput >= 1 && userInput <= itemArray.Count)
{
int selectedIndex = userInput - 1;
Item selecteditem = itemArray[selectedIndex];
if (!selecteditem.IsPurchased)
{
if (player.Gold >= selecteditem.Price)
{
selecteditem.IsPurchased = true;
haveItemList.Add(selecteditem);
player.Gold -= selecteditem.Price;
Console.WriteLine($"[{selecteditem.Name}을(를) 구매했습니다. [보유 골드: {player.Gold} G]]\n");
}
else
{
Console.WriteLine("[골드가 부족합니다.]\n");
}
}
else
{
Console.WriteLine("[이미 구매한 아이템입니다.]\n");
}
}
else
{
Console.WriteLine("[잘못된 입력입니다.]\n");
}
}
else if (roomManager == "selling_item")
{
Console.WriteLine("\n[상점 - 아이템 판매]");
Console.WriteLine("[아이템 번호를 입력하면 아이템을 판매할 수 있습니다.]");
Console.WriteLine("[판매 가격은 아이템 구매 가격의 85%입니다.]\n");
Console.WriteLine($"[보유 골드]\n{player.Gold} G");
Console.WriteLine("\n[보유 중인 아이템 목록]");
for (int i = 0; i < haveItemList.Count; i++)
{
Console.WriteLine($"- {i + 1}. {haveItemList[i].Name,-15} | {GetItemStatInfo(haveItemList[i])} | {haveItemList[i].FlavorText,-45} | {haveItemList[i].Price * 85 / 100} G");
}
Console.WriteLine("\n0. 나가기");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
if (userInput == 0)
{
roomManager = "shop_room";
}
else if (userInput >= 1 && userInput <= haveItemList.Count)
{
int selectedIndex = userInput - 1;
Item selecteditem = haveItemList[selectedIndex];
selecteditem.IsPurchased = false;
selecteditem.IsEquipped = false;
haveItemList.Remove(selecteditem);
player.Gold += (int)(selecteditem.Price * 0.85);
Console.WriteLine($"[{selecteditem.Name}을(를) 판매했습니다. [보유 골드: {player.Gold} G]]\n");
}
else
{
Console.WriteLine("[잘못된 입력입니다.]\n");
}
}
else if (roomManager == "dungeon_room")
{
int totalDef = CalculateTotalDefense(player, haveItemList);
int totalAtk = CalculateTotalAttack(player, haveItemList);
Console.WriteLine("\n[던전]");
Console.WriteLine("[던전에 입장할 때마다 체력이 소모됩니다.]");
Console.WriteLine("[공격력이 높을 수록 보상 Up, 방어력이 높을 수록 성공 확률 Up]");
Console.WriteLine("[입장 난이도를 선택하세요.]\n");
Console.WriteLine($"[현재 공격력 : {totalAtk}]");
Console.WriteLine($"[현재 방어력 : {totalDef}]");
Console.WriteLine($"[현재 체력 : {player.Health}]\n");
Console.WriteLine("1. 쉬운 던전 | 방어력 15 이상 권장" + (totalDef >= 15 ? " [조건 충족!]" : ""));
Console.WriteLine("2. 일반 던전 | 방어력 25 이상 권장" + (totalDef >= 25 ? " [조건 충족!]" : ""));
Console.WriteLine("3. 어려운 던전 | 방어력 40 이상 권장" + (totalDef >= 40 ? " [조건 충족!]" : ""));
Console.WriteLine("\n0. 나가기");
Console.Write(">>");
int userInput = int.Parse(Console.ReadLine());
switch (userInput)
{
case 0:
roomManager = "robby_room";
break;
case 1:
roomManager = "easy_dungeon";
break;
case 2:
roomManager = "normal_dungeon";
break;
case 3:
roomManager = "hard_dungeon";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else if (roomManager == "easy_dungeon")
{
ExploreDungeon(player, haveItemList, ref roomManager, 15, 1000, ref dungeon_choice_waiting);
}
else if (roomManager == "normal_dungeon")
{
ExploreDungeon(player, haveItemList, ref roomManager, 25, 1700, ref dungeon_choice_waiting);
}
else if (roomManager == "hard_dungeon")
{
ExploreDungeon(player, haveItemList, ref roomManager, 40, 2500, ref dungeon_choice_waiting);
}
else if (roomManager == "rest_room")
{
Console.WriteLine("[여관]\n");
Console.WriteLine($"[500 G를 내면 체력을 회복할 수 있습니다. (보유 골드 : {player.Gold} G )]");
Console.WriteLine($"[여관에서 휴식하면 데이터를 저장할 수 있습니다.]");
Console.WriteLine($"[휴식하기 (비용: 500 G) 현재 체력: {player.Health}]\n");
Console.WriteLine("1. 휴식하기");
Console.WriteLine("0. 나가기\n");
Console.WriteLine("원하시는 행동을 입력해주세요.");
Console.Write(">>");
int restChoice;
if (int.TryParse(Console.ReadLine(), out restChoice))
{
switch (restChoice)
{
case 1:
if (player.Gold >= 500)
{
player.Health = 100;
player.Gold -= 500;
Console.WriteLine($"[체력이 100이 되었습니다.]");
SaveData(player, itemArray);
Console.WriteLine($"[보유 골드]\n{player.Gold} G");
}
else
{
Console.WriteLine($"[골드가 부족합니다.]");
Console.WriteLine($"[보유 골드]\n{player.Gold} G");
}
break;
case 0:
roomManager = "robby_room";
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
break;
}
}
else
{
Console.WriteLine("[잘못된 입력입니다.]\n");
}
}
else
{
Console.WriteLine("\n[오류가 발생했습니다. 로비로 이동합니다.]\n");
roomManager = "robby_room";
}
}
AppDomain.CurrentDomain.ProcessExit += (sender, eventArgs) =>
{
SaveData(player, itemArray);
};
}
static void DisplayCharacterStatus(Character player, List<Item> equippedItems)
{
Console.WriteLine("\n[상태 보기]");
Console.WriteLine("[캐릭터의 정보가 표시됩니다.]\n");
Console.WriteLine($"Lv. {player.Level:D2}");
Console.WriteLine($"이름 : {player.Name}");
Console.WriteLine($"직업 : ({player.Job})");
int totalAttack = player.Attack;
var equippedWeapons = equippedItems.Where(item => item.Type == "Weapon" && item.IsEquipped);
if (equippedWeapons.Any())
{
totalAttack += equippedWeapons.Sum(item => item.AtkStat);
Console.WriteLine($"공격력 : {totalAttack} + ({equippedWeapons.Sum(item => item.AtkStat)})");
}
else
{
Console.WriteLine($"공격력 : {totalAttack}");
}
int totalDefense = player.Defense;
var equippedArmors = equippedItems.Where(item => item.Type == "Armor" && item.IsEquipped);
if (equippedArmors.Any())
{
totalDefense += equippedArmors.Sum(item => item.DefStat);
Console.WriteLine($"방어력 : {totalDefense} + ({equippedArmors.Sum(item => item.DefStat)})");
}
else
{
Console.WriteLine($"방어력 : {totalDefense}");
}
Console.WriteLine($"체 력 : {player.Health}");
Console.WriteLine($"Gold : {player.Gold} G\n");
Console.WriteLine($"[현재 경험치: {player.Exp} / 최대 경험치: {player.MaxExp}]\n[다음 레벨까지 {player.MaxExp - player.Exp} 남았습니다.]\n");
}
static int CalculateTotalDefense(Character player, List<Item> equippedItems)
{
int totalDefense = player.Defense;
var equippedArmors = equippedItems.Where(item => item.Type == "Armor" && item.IsEquipped);
if (equippedArmors.Any())
{
totalDefense += equippedArmors.Sum(item => item.DefStat);
}
return totalDefense;
}
static int CalculateTotalAttack(Character player, List<Item> equippedItems)
{
int totalAttack = player.Attack;
var equippedWeapons = equippedItems.Where(item => item.Type == "Weapon" && item.IsEquipped);
if (equippedWeapons.Any())
{
totalAttack += equippedWeapons.Sum(item => item.AtkStat);
}
return totalAttack;
}
static string GetItemStatInfo(Item item)
{
if (item.Type == "Weapon")
{
return $"공격력 +{item.AtkStat}";
}
else if (item.Type == "Armor")
{
return $"방어력 +{item.DefStat}";
}
else
{
return "스탯 정보 없음";
}
}
static void ExploreDungeon(Character player, List<Item> haveItemList, ref string roomManager, int appropriate_def, int basic_reward, ref bool dungeon_choice_waiting)
{
if (dungeon_choice_waiting == false)
{
if (player.Health <= 0)
{
player.Health = 0;
Console.WriteLine("[체력이 부족합니다.]");
Console.WriteLine("[체력이 부족하여 던전에 입장할 수 없습니다.]");
Console.WriteLine("[던전 선택방으로 이동합니다.]\n");
roomManager = "dungeon_room";
return;
}
int totalDef = CalculateTotalDefense(player, haveItemList);
int totalAtk = CalculateTotalAttack(player, haveItemList);
if (totalDef >= appropriate_def)
{
int damageTaken = new Random().Next(20 + (appropriate_def - totalDef), 35 + (appropriate_def - totalDef));
player.Health -= damageTaken;
if (player.Health <= 0)
{
player.Health = 0;
}
int bonusGoldPercentage = new Random().Next(totalAtk, totalAtk * 2);
int bonusGold = (int)(basic_reward * bonusGoldPercentage / 100.0);
int goldEarned = basic_reward + bonusGold;
player.Gold += goldEarned;
Console.WriteLine($"[던전 클리어! 축하합니다!]\n[체력 감소: {damageTaken}]\n");
Console.WriteLine($"[기본 보상]\n+{basic_reward} G");
Console.WriteLine($"[보너스]\n+{bonusGold} G");
Console.WriteLine($"[총 획득 골드]\n+{goldEarned} G\n");
Console.WriteLine($"[현재 보유 골드: {player.Gold} G]");
Console.WriteLine($"[현재 남은 체력: {player.Health}]\n");
LevelUp(player, haveItemList);
Console.WriteLine("1. 계속 던전 탐험");
Console.WriteLine("0. 나가기");
Console.Write(">>");
int exploreChoice = int.Parse(Console.ReadLine());
switch (exploreChoice)
{
case 0:
roomManager = "dungeon_room";
break;
case 1:
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
dungeon_choice_waiting = true;
break;
}
}
else
{
int randomValue = new Random().Next(0, 10);
if (randomValue <= 3)
{
int damageTaken = new Random().Next(20 + (appropriate_def - totalDef), 35 + (appropriate_def - totalDef)) / 2;
player.Health -= damageTaken;
if (player.Health <= 0)
{
player.Health = 0;
}
Console.WriteLine($"[던전 탐험 실패... 체력 감소: {damageTaken}]\n");
Console.WriteLine($"[현재 보유 골드: {player.Gold} G]");
Console.WriteLine($"[현재 남은 체력: {player.Health}]\n");
Console.WriteLine("1. 다시 시도");
Console.WriteLine("0. 나가기");
Console.Write(">>");
int retryChoice = int.Parse(Console.ReadLine());
switch (retryChoice)
{
case 0:
roomManager = "dungeon_room";
break;
case 1:
break;
default:
Console.WriteLine("[잘못된 입력입니다.]\n");
dungeon_choice_waiting = true;
break;
}
}
else
{
int damageTaken = new Random().Next(20 + (appropriate_def - totalDef), 35 + (appropriate_def - totalDef));
player.Health -= damageTaken;
if (player.Health <= 0)
{
player.Health = 0;
}
int bonusGoldPercentage = new Random().Next(totalAtk, totalAtk * 2);
int bonusGold = (int)(basic_reward * bonusGoldPercentage / 100.0);
int goldEarned = basic_reward + bonusGold;
player.Gold += goldEarned;
Console.WriteLine($"[던전 클리어! 축하합니다!]\n[체력 감소: {damageTaken}]\n");
Console.WriteLine($"[기본 보상]\n+{basic_reward} G");
Console.WriteLine($"[보너스]\n+{bonusGold} G");
Console.WriteLine($"[총 획득 골드]\n+{goldEarned} G\n");
Console.WriteLine($"[현재 보유 골드: {player.Gold} G]");
Console.WriteLine($"[현재 남은 체력: {player.Health}]\n");
LevelUp(player, haveItemList);
Console.WriteLine("1. 계속 던전 탐험");
Console.WriteLine("0. 나가기");
Console.Write(">>");
int exploreChoice = int.Parse(Console.ReadLine());
switch (exploreChoice)
{
case 0:
roomManager = "dungeon_room";
break;
case 1:
roomManager = roomManager;
break;
default:
Console.WriteLine("[잘못된 입력입니다.]");
dungeon_choice_waiting = true;
break;
}
}
}
}
else
{
dungeon_choice_waiting = false;
Console.WriteLine("[올바른 숫자를 입력해주세요.]");
Console.WriteLine("\n1. 계속 던전 탐험");
Console.WriteLine("0. 나가기");
Console.Write(">>");
int exploreChoice = int.Parse(Console.ReadLine());
switch (exploreChoice)
{
case 0:
roomManager = "dungeon_room";
break;
case 1:
roomManager = roomManager;
break;
default:
Console.WriteLine("[잘못된 입력입니다.]");
dungeon_choice_waiting = true;
break;
}
}
}
static void LevelUp(Character player, List<Item> haveItemList)
{
player.Exp += 1;
Console.WriteLine($"[경험치를 1 획득했습니다!]");
if (player.Exp == player.MaxExp)
{
player.Level += 1;
player.Attack += 1;
player.Defense += 2;
player.MaxExp = player.Level;
player.Exp = 0;
int totalDef = CalculateTotalDefense(player, haveItemList);
int totalAtk = CalculateTotalAttack(player, haveItemList);
Console.WriteLine($"[레벨 업! 축하합니다!]");
Console.WriteLine($"[레벨 {player.Level} 달성!]\n");
Console.WriteLine($"[공격력이 1 증가했습니다.]");
Console.WriteLine($"[방어력이 2 증가했습니다.]\n");
Console.WriteLine($"[현재 공격력: {totalAtk}]");
Console.WriteLine($"[현재 방어력: {totalDef}]");
}
Console.WriteLine($"[현재 경험치: {player.Exp} / 최대 경험치: {player.MaxExp} 다음 레벨까지 {player.MaxExp - player.Exp} 남았습니다.]\n");
}
static void SaveData(Character player, List<Item> items)
{
string playerData = JsonSerializer.Serialize(player);
File.WriteAllText("player_data.json", playerData);
string itemsData = JsonSerializer.Serialize(items);
File.WriteAllText("items_data.json", itemsData);
Console.WriteLine("[데이터를 저장했습니다.]\n");
}
static Character LoadPlayerData()
{
Console.WriteLine("[데이터 로드 중..]\n");
if (File.Exists("player_data.json"))
{
string playerData = File.ReadAllText("player_data.json");
return JsonSerializer.Deserialize<Character>(playerData);
}
else
{
Console.WriteLine("[불러 올 데이터가 없습니다.]");
Console.WriteLine("[새 데이터를 생성 합니다.]\n");
return null;
}
}
static List<Item> LoadItemsData()
{
if (File.Exists("items_data.json"))
{
string itemsData = File.ReadAllText("items_data.json");
return JsonSerializer.Deserialize<List<Item>>(itemsData);
}
else
{
return null;
}
}
}
'오늘의 나는 어떤 문제를 겪었는지, 앞으로 어떻게 해결할 것인지' - 개선
솔직히 말해서, 내가 작성했지만 너무 복잡하고 어지럽다.
코딩 문법이 눈에 확확 들어오지 않고 한문단 한문단 띄엄띄엄 해석해야 무슨 기능을 하는지 해독할 수 있는 것이 마치 영어를 처음 배우는 유치원생의 기분이다.
막히거나 모르는 부분은 구글링이나 챗GPT를 통해서 찢어진 인형 땜빵하는 느낌으로 기워 맞췄으니, 내가 짠 코드라고 당당하게 부를 수 있을 지도 의문이다.
어쨌든 버그나 오류 없이 작동하니까, 로직 자체는 이해하고 있으니까, 오류 나는 부분들, 의도하지 않게 작동하는 부분들은 직접 손봤으니까 문제 없지 않을까라고 생각하면서도, 아직도 한참 갈길이 멀다는 생각이 든다.
따라서, 이 문제를 개선하려면 반복 및 숙달 밖에 방법이 없다는 결론에 도달했다.
'TIL' 카테고리의 다른 글
2024/1/9 TIL (1) | 2024.01.09 |
---|---|
2024/1/8 TIL (1) | 2024.01.08 |
2024/01/04 TIL (0) | 2024.01.04 |
2024/01/03 TIL (0) | 2024.01.03 |
2024/01/02 TIL (1) | 2024.01.02 |