bool isGameRunning = true; //게임 실행 상태
//StartGame, Village, Item 객체 생성
string userName = "UnKnown";
//유저 이름 받기
startGame.PrintStart();
userName = Console.ReadLine(); //최초 유저 이름 받기
UserInfo userInfo = new UserInfo(userName);
Shop shop = new Shop(userInfo); //userInfo 객체 전달
shop.AddItems(); //상점에 아이템 추가
Inventory inventory = new Inventory(shop, userInfo); //shop 객체 전달
int userActionInput = 0; //유저가 선택한 값
while (isGameRunning)
{
//userActionInput로 마을에서 행동 고르기
switch (userActionInput)
{
case 1: //상태 보기
break;
case 2: //인벤토리
break;
case 3: //상점
break;
default: //잘못된 입력 감지
break;
}
}
💥 (중복 코드) switch문 위에 있는 while문 필요 없음
while (userActionInput < 1 || userActionInput > 3) {userActionInput 다시 입력 받기}
게임 시작 멘트 출력
환영 인사 및 마을에서 할 수 있는 활동 고르기 멘트 출력
유저 관련 변수
private int level; //레벨
private string name; //이름
private string job; //직업
private int attackPower; //공격력
private int defensePower; //방어력
private int healthPoints; //체력
private int goldAmount; //소지골드
private int bonusStatsAP; //장비로 올라간 공격력 추가 스탯
private int bonusStatsDP; //장비로 올라간 방어력 추가 스탯
getter/setter
생성자
유저 이름을 제외한 나머지는 고정값
public UserInfo(string _userName)
{
level = 1;
name = _userName;
job = "전사";
attackPower = 10;
defensePower = 5;
healthPoints = 100;
goldAmount = 1500;
}
메소드
PrintUserInfo() : 유저 정보 출력if(bonusStatsAP == 0)
{
Console.WriteLine("공격력 : " + attackPower);
}
else
{
Console.WriteLine($"공격력 : {attackPower} (+{bonusStatsAP})");
}
if(bonusStatsDP == 0)
{
Console.WriteLine("방어력 : " + defensePower);
}
else
{
Console.WriteLine($"방어력 : {defensePower} (+{bonusStatsDP})");
}
Shop, UserInfo 가져와서 사용할 수 있게 만들기
internal class Inventory
{
Shop shop;
UserInfo userInfo;
//생략
public Inventory(Shop shop, UserInfo userInfo)
{
//생성자에서 shop, userInfo 객체 받아서 할당
this.shop = shop;
this.userInfo = userInfo;
}
}
메소드
PrintUserInventory() : 인벤토리 출력PrintToggleEquipItem() : 장비 장착 관리 출력ToggleEquipItem() : 장비 장착 관리아이템 관련 변수
private int itemIndex; //아이템 번호
private string itemName; //아이템 이름
private string itemType; //아이템 종류
private int itemStats; //아이템 스탯
private string itemDescription; //아이템 설명
private int itemPrice; //아이템 가격
private bool hasItem; //아이템 보유 상태
private bool isUsing; //아이템 장착 상태
💥 itemIndex 삭제해야 함
getter/setter
생성자
아이템 리스트 생성 및 추가 메소드
아이템 리스트 생성, UserInfo 가져와서 사용할 수 있게 만들기
List<Item> itemList = new List<Item>();
UserInfo userInfo;
public Shop(UserInfo userInfo)
{
//생성자에서 userInfo 객체 받아서 할당
this.userInfo = userInfo;
}
메소드
AddItems() : 아이템 추가PrintShopItemList() : 아이템 목록 출력if (hasItem == true)
{
itemPrice = "구매완료";
}
Console.WriteLine($"- {itemName} | {itemType} | {itemDescription} | {itemPrice}");
PrintBuyShopItem() : 아이템 구매 리스트 출력PrintToggleEquipItem() 와 동일한 수정 필요BuyShopItem() : 아이템 구매PrintToggleEquipItem() 와 동일한 수정 필요GetItemListCount() : 아이템 목록 길이GetItemList() : 아이템 목록강의를 생각보다 오래 듣게 되어 작업할 수 있는 시간이 많지 않았다.
시간에 쫓기다 보니 여러 방향으로 생각하기 어려웠다.
전반적으로 코드 정리(Main에 때려박은 기능, 가독성 등)를 하고 싶었고,
중복된 기능들(userActionInput 값 다시 받기 등)을 메소드로 만들어 사용하면 좋을 것 같다.
필수 기능만이라도 다 구현해보고 싶어서 오류를 잡지 못했다. (타임어택)
기능 테스트를 할 땐 다양하게 해보자...
매번 1번 장비로만 테스트를 했었는데, 제출 직전에 Item의 itemIndex 문제를 발견했다. 😱
소괄호
함수 - 매개변수
if문 - 조건식
쓰기 좋은 경우
switch문
케이스가 딱 떨어지는 것, 경우의 수가 한정적인 것, 구분이 명확한 case가 많을 때
if문
범위 조건
switch/if문은 취향이 아니라, 어떤 상황에 어떻게 쓸 것인지에 따라 골라 써야하는 거였구나...
튜터님: 조건문을 2D 때 까지는 3중을 넘어가지 말자!
반복문
(조건){명령}
for/while문

var, object, T 간단 명료한 설명! 🤣