STIKA
Unity 캠프 11일차 TIL < TextGame 2차 > 본문
24.01.08 Mon
❤️ TIL
Today I Learned
❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)
📌 오늘의 계획
- 해설영상 보면서 지난주에 만든 TextGame 코드 정리
- TextGame 추가기능 구현
✏️ 작업 내용
[선택요구사항]
아이템 정보를 클래스 / 구조체로 활용
아이템 정보를 배열로 관리
아이템 추가기능
판매하기 기능
장착기능 개선 - 중복 장착X, 부위별로 한개씩
장비가 장착되어있다면 자동으로 해제하고 장착
던전 입장 기능 - 던전 탐험
난이도별 구성 및 확률 및 보상
휴식기능
레벨업 기능
게임 저장하기 기능
세상에 세상에 이런게 있는지는 꿈에도 몰랐다.
ASCII art라는데 내가 글씨를 적으면 이런걸 만들어준다.
코드에 가지고 와서 void StartLogo 하나 만들어서
Console.WriteLine으로 넣어주면 끝!!
Console.ReadKey();
화면을 잠깐 멈춰놓고 아무키나 눌렀을때 다음 진행상황으로 넘어가게 해줌
cw"
Console.WriteLine("");
를 자동으로 만들어주는 자동완성기능(?)
완전 편함
근데 해보니까 밑에 아무것도 없어야하더라
public static int GetPrintableLength(string str)
{
int length = 0;
foreach(char c in str)
{
if (char.GetUnicodeCategory(c) == System.Globalization.UnicodeCategory.OtherLetter)
{
length += 2; // 한글과 같은 넒은 문자에 대해 길이를 2로 취급
}
else
{
length += 1; // 나머지 문자에 대해 길이를 1로 취급
}
}
return length;
}
public static string PadRightForMixedText(string str, int totalLenth)
{
int currentLength = GetPrintableLength(str);
int padding = totalLenth - currentLength;
return str.PadRight(str.Length + padding);
}
한글은 문자 2개로 취급된다고 함
간격을 정렬시켜줄껀데 string의 PadRight나 PadLeft로는 한글에 한계가 있어서
따로 함수를 추가로 만듬
total 내가 원하는 총길이인데 한글고려x
str.length는 한글고려x
currentLength는 한글고려된 함수를 이용한 인트값을 반환함 한글고려 0
padding = 한글Xtotal - 한글0current = 한글을 고려해서 넣어야할 패딩
padRight는 적어진 수치만큼 빈칸을 넣음
나름의 설명
<PadRight, PadLeft 사용방법>
String.PadLeft(number, char)
String.PadRight(number, char)
PadLeft는 총 길이가 number가 되도록 String의 왼쪽에 char를 반복하여 붙여넣기
PadRight는 총 길이가 number가 되도록 String의 오른쪽에 char를 반복하여 붙여넣기
<다른 방법>
String testString = testString.PadRight(10, 'Z');
10만큼 Z를 반복해서 붙여넣기
<주의사항>
PadLeft, PadRight가 적용된 String의 길이가 이미 더 길다면 추가하지 않는다.
PadRight, PadLeft 사용방법
이해가 안되서 구글링해서 찾아왔다.
internal class Game2
{
static Character player;
static Item[] items;
static void Main(string[] args)
{
GameDataSetting();
PrintStartLogo();
StartMenu();
}
요런식으로 While안쓰고 깔끔하게 만들수있음
<잘못된 입력 대비>
switch (CheckValidInput(1, 5))
{
case 1:
StatusMenu();
break;
case 2:
InventoryMenu();
break;
case 5:
return;
}
private static int CheckValidInput(int min, int max)
{
int keyInput;
bool result;
do
{
Console.Write("\n원하시는 행동을 입력해 주세요.\n>> ");
result = int.TryParse(Console.ReadLine(), out keyInput);
} while(result == false || CheckIfValid(keyInput, min, max) == false);
// 여기에 왔다는 것은 제대로 입력을 받았다는 것
return keyInput;
}
private static bool CheckIfValid(int keyInput, int min, int max)
{
if (min <= keyInput && keyInput <= max) return true;
return false;
}
잘못된 입력 대비
비정상 입력 → 재입력 수행
1. 숫자가 아닌 입력을 받은 경우
2. 숫자가 최소-최대 범위를 넘은 경우
[개선가능사항] - 강의 다 듣게 되는날 이거 전부 완성시켜보기
아이템 배열 List으로 변경 (아이템 10개여야 할 이유 전혀 없음)
getSumBonusXXX계열함수 통일
인벤토리 정렬하기
→ 인벤토리 정렬하기 기능은 4주차 LINQ / 람다 함수를 통해 가능
LINQ(4주차)를 활용한 리스트 정렬
→ var sortedItems = items.OrderBy(item => item.Name.Length).ToList();
람다 함수(4주차)를 활용한 리스트 정렬
→ item1.Name.Length.CompareTo(item2.Name.Length));
아이템 구매/판매하기
던전입장/휴식/레벨업 기능
장착 개선
→ 아이템 타입 변수와 Dictionary를 활용해서 구현
<샘플코드>
static Dictionary isTypeEquipped = new Dictionary();
static void ToggleEquipStatus(int idx)
{
if (!isTypeEquipped.ContainsKey(idx))
isTypeEquipped[idx] = false;
if (isTypeEquipped[idx] == true && !items[idx].IsEquipped)
return;
items[idx].IsEquiped = !items[idx].IsEquiped;
}
데이터 저장 Newtonsoft.Json의 JsonConvert 클래스를 활용해서 구현
<샘플코드>
using Newtonsoft.Json;
using System.IO;
static void SaveItemsToJson(string filePath)
{
string json = JsonConvert.SerializeObject(items, Formatting.Indented);
File.WriteAllText(filePath, json); // JSON 문자열을 파일로 저장
static void LoadItemsFromJson(string filePath)
{
// 파일로부터 JSON 문자열을 읽기
string json = File.ReadAllText(filePath);
// JSON 문자열로부터 아이템 리스트를 역직렬화
items = JsonConvert.DeserializeObject(json);
}
📝 오늘의 마무리
확실히 튜터님 설명을 들으면서 만드니까
내가 왜 이걸 이렇게 어렵게 만들었나 싶은게 많았다
다 만들고 나서도 코드도 깔끔하고 이쁘고
코드의 재사용이 이런건가 싶을만큼
메서드 하나 잘 만들어서 꾸준히 쓰고
내가 할 땐 그냥 숙제같았는데
이렇게 만드니까 또 재미있다
✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기
✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기
✏️ 꾸준히 기록을 남기는 습관 가지기
📕 오늘의 학습 키워드
📕 공부한 내용 본인의 언어로 정리하기
📕 오늘의 회고
📕 12시간 중 얼마나 몰입했는지
📕 더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지
'프로그래밍 > Unity + C#' 카테고리의 다른 글
Unity 캠프 13일차 TIL < C# 문법 3-2 / 알고리즘 > (0) | 2024.01.10 |
---|---|
Unity 캠프 12일차 TIL < C# 문법 3-1 / 팀 과제 > (0) | 2024.01.09 |
Unity 캠프 10일차 TIL < TextGame 1차 > (0) | 2024.01.04 |
내일배움캠프 Unity 9일차 TIL - C# 문법 2-2 (0) | 2024.01.04 |
내일배움캠프 Unity 8일차 TIL - C# 문법 2-1 (0) | 2024.01.03 |