2주차 개인 프로젝트 [텍스트 게임 만들기] 생성 클래스, 조건문과 반복문

유승아·2024년 4월 25일

내일배움캠프

목록 보기
28/69

1. [텍스트 게임 만들기] 클래스

1) Main(Program)

 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 다시 입력 받기}

2) StartGame

게임 시작 멘트 출력

3) Village

환영 인사 및 마을에서 할 수 있는 활동 고르기 멘트 출력

4) UserInfo

유저 관련 변수

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})");
}

5) Inventory

Shop, UserInfo 가져와서 사용할 수 있게 만들기

internal class Inventory
{
    Shop shop;
    UserInfo userInfo;
    
//생략

    public Inventory(Shop shop, UserInfo userInfo)
    {
        //생성자에서 shop, userInfo 객체 받아서 할당
        this.shop = shop;
        this.userInfo = userInfo;
    }
}

메소드

  • PrintUserInventory() : 인벤토리 출력
    보유 중인 아이템 출력, 장착 중인 장비는 앞에 [E] 붙이기
  • PrintToggleEquipItem() : 장비 장착 관리 출력
    장비마다 인덱스 불러와서 선택하기
    💥 Item의 itemIndex 사용하지 않기 / foreach, int index에 ++ 하는 등... 수정 필요
  • ToggleEquipItem() : 장비 장착 관리
    선택한 장비 장착/해제, 장착/해제된 장비 스탯 적용하기

6) Item

아이템 관련 변수

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
생성자
아이템 리스트 생성 및 추가 메소드

7) Shop

아이템 리스트 생성, 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() : 아이템 구매 리스트 출력
    💥 Inventory의 PrintToggleEquipItem() 와 동일한 수정 필요
  • BuyShopItem() : 아이템 구매
    💥 Inventory의 PrintToggleEquipItem() 와 동일한 수정 필요
  • GetItemListCount() : 아이템 목록 길이
    Main에서 사용
  • GetItemList() : 아이템 목록
    Inventory에서 사용

강의를 생각보다 오래 듣게 되어 작업할 수 있는 시간이 많지 않았다.
시간에 쫓기다 보니 여러 방향으로 생각하기 어려웠다.

전반적으로 코드 정리(Main에 때려박은 기능, 가독성 등)를 하고 싶었고,
중복된 기능들(userActionInput 값 다시 받기 등)을 메소드로 만들어 사용하면 좋을 것 같다.

필수 기능만이라도 다 구현해보고 싶어서 오류를 잡지 못했다. (타임어택)

기능 테스트를 할 땐 다양하게 해보자...
매번 1번 장비로만 테스트를 했었는데, 제출 직전에 Item의 itemIndex 문제를 발견했다. 😱


😇 튜터님 멘토링 및 복습시간

조건문과 반복문

소괄호
함수 - 매개변수
if문 - 조건식

쓰기 좋은 경우
switch문
케이스가 딱 떨어지는 것, 경우의 수가 한정적인 것, 구분이 명확한 case가 많을 때

if문
범위 조건

switch/if문은 취향이 아니라, 어떤 상황에 어떻게 쓸 것인지에 따라 골라 써야하는 거였구나...

튜터님: 조건문을 2D 때 까지는 3중을 넘어가지 말자!


반복문
(조건){명령}
for/while문


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

0개의 댓글