STIKA

Unity 캠프 10일차 TIL < TextGame 1차 > 본문

프로그래밍/Unity + C#

Unity 캠프 10일차 TIL < TextGame 1차 >

STIKA 2024. 1. 4. 21:05

24.01.05 Fri

 

❤️ TIL

Today I Learned

❤️하루에 1%씩만 나아가도 4개월 동안 쌓이면 꽤 덩치가 커진답니다 :)


📌 오늘의 계획

  • TextGame 구상 및 작성
  • 필수요구사항 완성

✏️ 작업 내용

[필수요구사항]

게임 시작 화면

잘못된 입력 검사

캐릭터 상태창 (레벨, 이름, 직업, 공격력, 방어력, 체력, 골드)

인벤토리

아이템 장착기능 - 부위 중복 장착 허용, 장착 갯수 제한 X

장착시 상태창 정보 반영

상점

상점 아이템 목록

구매완료, 골드 부족 구현


 

결과적으로 모든 필수요구사항은 다 만들었지만

굉장히 복잡하고 더러워보이는  그런 코드들이 완성됨

 

만든 직후에는 굉장히 잘 만들었다 싶어서 뿌듯했는데

다시 다 훑어보니 내가 이렇게 반복문을 좋아하나 싶었다.

 

While문 안의 While문 안의 While문 이랄까..

(아니나 다를까 튜터님한테 과제 피드백 받았을 때 While문을 너무 많이 사용하는 경향이 있다고 지적받음..)

 

 

시작화면, 캐릭터 상태창은 생각보다 쉽게 만듬

public struct Player
{
    public Player(string strname)
    {
        name = strname;
        level = 1;
        chad = "초보자";
        hp = 100;
        gold = 1500;
        plusAttack = 0;
        attack = 10;
        plusDefensive = 0;
        defensive = 5;
    }

    public string name;
    public int level;
    public string chad;
    public int hp;
    public int gold;
    public int plusAttack;
    public int attack;
    public int plusDefensive;
    public int defensive;   
};

class를 배우기 전에 과제를 시작해버려서 구조체로 만듬

( 근데 class랑 struct랑 별반 다를 바 없어 보임)

직업이 따로 없어서 이름만 받아오면 다른 수치는 고정으로 만듬

 

Item[] inventory = new Item[20];

for (int i = 0; i < inventory.Length; i++)
{
    inventory[i].name = "0";
}

클래스도 생성자도 잘 몰라서 일단 만들어두고

for문으로 하나하나 돌면서 이름들을 0으로 초기화..

 

실험용
if (inventory[0].name == "0")
    inventory[0] = new Item(false, "공격", "무기", 5, 500, "실험이요");

실험용으로 아이템 하나를 만들었다

false로 장착여부를 판단하는 것

 

while (!isGame)
{
    Console.WriteLine("<마을>\n");
    Console.WriteLine("[활동 선택]\n");

    Console.WriteLine("1. 상태 보기");
    Console.WriteLine("2. 인벤토리");
    Console.WriteLine("3. 상점");
    Console.WriteLine("\n5. 게임 끝내기");

    Console.Write("\n원하시는 행동을 입력해 주세요.\n>> ");
    input = Console.ReadLine();
    
    . . .

while문으로 게임 시작을 하고

isGame을 true로 바꿔서 게임을 종료하는 식으로 만들려고 했는데

이게 게임이 생각보다 양이 많아서 그런지

While안의 While이 무수하게 반복됨..

 

잘못된 입력 검사도 while로 만듬

 

근데 정리하면서 생각해보니

그냥 둘다 메서드 하나씩 만들었음 됐을듯..

 

C++공부한지 좀 됐다고 머리가 다시 돌이 되어버렸나봄..

(C++얘기가 나와서 그런데 함수와 메서드의 차이는 알겠는데 자꾸 함수라고 말이 나온다

근데 그렇게 하면 엄청 안되는 그런걸까)

 

Console.WriteLine("[아이템 목록]");
Console.WriteLine("- {0}     | {1}력 +{2}  | {3}                   |  {4}", shop[1].name, shop[1].type, shop[1].value, shop[1].explain, 
            ((shop[1].state == true) ? shop[1].gold.ToString() + " G" : "구매완료"));
Console.WriteLine("- {0}       | {1}력 +{2}  | {3}               |  {4}", shop[2].name, shop[2].type, shop[2].value, shop[2].explain,
            ((shop[2].state == true) ? shop[2].gold.ToString() + " G" : "구매완료"));
Console.WriteLine("- {0} | {1}력 +{2} | {3}|  {4}", shop[3].name, shop[3].type, shop[3].value, shop[3].explain,
            ((shop[3].state == true) ? shop[3].gold.ToString() + " G" : "구매완료"));
Console.WriteLine("- {0}         | {1}력 +{2}  | {3}                  |   {4}", shop[4].name, shop[4].type, shop[4].value, shop[4].explain,
            ((shop[4].state == true) ? shop[4].gold.ToString() + " G" : "구매완료"));
Console.WriteLine("- {0}       | {1}력 +{2}  | {3}             |  {4}", shop[5].name, shop[5].type, shop[5].value, shop[5].explain,
            ((shop[5].state == true) ? shop[5].gold.ToString() + " G" : "구매완료"));
Console.WriteLine("- {0}   | {1}력 +{2}  | {3}  |  {4}", shop[6].name, shop[6].type, shop[6].value, shop[6].explain,
            ((shop[6].state == true) ? shop[6].gold.ToString() + " G" : "구매완료"));

슬쩍 보기만해도 엄청난 광경

출력할때 간격이 똑같게 쭉쭉 나오는걸 만들고 싶어서 하나하나 띄어쓰기를 다했는데

나중에 해설영상과 함께 보니

정렬하는 방법이 있었던..

 

 


📝 오늘의 마무리

의외로 장착관리, 인벤, 상점, 구매 이런것들은 별로 어렵진 않았다.

근데 이거 만드는데 시간이 어마무시하게 들었다.

내 머리의 한계를 느꼈지만 그래도 점점 나아졌으면 좋겠다.


 

✏️ 스스로 어제보다 한 발 더 나아갔다는 것을 자각하기

✏️ TIL을 쓰기 위해서라도, 오늘 반드시 단 하나라도 배우기

✏️ 꾸준히 기록을 남기는 습관 가지기

 

📕 오늘의 학습 키워드

📕  공부한 내용 본인의 언어로 정리하기

📕  오늘의 회고

📕  12시간 중 얼마나 몰입했는지

📕  더 나은 미래를 위해 내일 어떤 공부를 진행할 것인지