저번에 적은 내용은 제외하고 정리했다.
먼저 문자에 대한 예외 처리
int result;
while (true) // 반복해서 실행할 수 있도록
{
string input = Console.ReadLine();
bool isNumber = int.TryParse(input, out result); // 문자에 대한 예외처리 코드
if(isNumber)
{
break;
}
Console.WriteLine("잘못된 입력입니다");
}
해설
사용자가 입력한 값이 input 변수에 저장되고 TryParse에 int 결과가 들어감
입력한 값이 숫자가 아니라면 TryParse 의 값이 False 처리되므로 if문을 빠져나가고 while문을 다시 반복
입력한 값이 숫자라면 TryParse 의 값이 True 처리되므로 if문에 break가 작동하고 while문을 빠져나감
Tryparse는 손에 익을때까지 계속 쳐봐야겠다.
추가 공격력 구현
if(extraAtk == 0)
Console.WriteLine($"공격력 : {atk}");
else
{
Console.WriteLine($"공격력 : {atk} (+{extraAtk})");
}
왜 변수로 extraAtk를 선언 해볼 생각을 못했을까 느낀 부분
삼항연산자
string displayAtk;
displayAtk = extraAtk == 0 ? $"공격력 : {atk}" : $"공격력 : {atk} (+{extraAtk})";
Console.WriteLine(displayAtk);
// 최종정리
Console.WriteLine(extraAtk == 0 ? $"공격력 : {atk}" : $"공격력 : {atk} (+{extraAtk})");
같은 구문이지만 삼항연산자를 통해 코드의 가독성을 높힐 수 있다.
아이템목록 나타내기
// 배열선언
private static string[] itemName = { "수련자 갑옷", "무쇠갑옷", "스파르타의 갑옷", "낡은 검", "청동 도끼", "스파르타의 창"};
private static int[] itemType = { 1, 1, 1, 0, 0, 0 }; // 0 : 무기, 1 : 방어구
private static int[] itemValue = { 5, 9, 15, 2, 5, 7 };
private static string[] itemDesc = {"수련에 도움을 주는 갑옷입니다.", "무쇠로 만들어져 튼튼한 갑옷입니다.", "스파르타의 전사들이 사용했다는 전설의 갑옷입니다.", "쉽게 볼 수 있는 낡은 검 입니다.", "어디선가 사용됐던거 같은 도끼입니다.", "스파르타의 전사들이 사용했다는 전설의 창입니다."};
private static int[] itemPrice = {1000, 2000, 3500, 600, 1500, 2500};
[아이템목록]
Console.WriteLine($"- {itemName[0]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[0]} | {itemDesc[0]} | {itemPrice[0]} G");
Console.WriteLine($"- {itemName[1]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[1]} | {itemDesc[1]} | {itemPrice[1]} G");
Console.WriteLine($"- {itemName[2]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[2]} | {itemDesc[2]} | {itemPrice[2]} G");
Console.WriteLine($"- {itemName[3]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[3]} | {itemDesc[3]} | {itemPrice[3]} G");
Console.WriteLine($"- {itemName[4]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[4]} | {itemDesc[4]} | {itemPrice[4]} G");
Console.WriteLine($"- {itemName[5]} | {(itemType[0] == 0 ? "공격력" : "방어력")} +{itemValue[5]} | {itemDesc[5]} | {itemPrice[5]} G");
물론 이렇게도 구현 가능하지만, 굉장히 복잡하고 코드가 지저분하며
인덱스에 접근 시 숫자를 잘못 기입하는 문제 발생할 수 있다.
반복문을 통해 해결할 수 있다.(배열과 반복문은 항상 같이 생각한다.)
for(int i = 0; i < itemName.Length; i++)
{
Console.WriteLine($"- {itemName[i]} | {(itemType[i] == 0 ? "공격력" : "방어력")} +{itemValue[i]} | {itemDesc[i]} | {itemPrice[i]} G");
}
itemName의 개수(Length)만큼 반복문을 처리한 것이다. (배열을 쓰는 장점 중 하나)
인벤토리 구현
리스트를 사용한다.
private static List<int> inventory = new List<int>();
private static string[] itemName = { "수련자 갑옷", "무쇠갑옷", "스파르타의 갑옷", "낡은 검", "청동 도끼", "스파르타의 창"};
배열 순서대로 0, 1, 2, 3, 4, 5
어떤걸 선택하냐에 따라 inventory에 추가하는 행위가 된다.
List.add();
이외 내용은 너무 길기도 하고 단순 내용 정리외엔 별 의미가 없는 것 같아서 적다가 지웠다.
추가로 알게된 부분은 배열과 리스트 사용시 반복문에 조건식에 기재되는 내용에 차이가 있다.
배열은 Length, 리스트는 Count
반복문의 조건식은 단순히 숫자만 들어가는것이 아닌 개수(Length, Count)만큼 기입 가능한점은
응용할 수 있다면 좋은 스킬인 것 같다.
'개발일지' 카테고리의 다른 글
241002(수) [팀과제: 로딩 구현] (0) | 2024.10.02 |
---|---|
241001(화) [팀과제, 인터페이스와 열거형] (0) | 2024.10.01 |
240926(목) [개인 과제 해설 강의 시청 : 필수 기능] (0) | 2024.09.26 |
240924(화) C# 문법 종합반 [클래스와 객체] (0) | 2024.09.24 |
240923(월) C# 문법 종합반 [메서드와 구조체] (0) | 2024.09.23 |