TIL(Today I Learned)

텍스트 RPG 게임 : 상점, 인벤토리에 기능 추가 - TIL#16

Najdorf 2024. 1. 15. 22:51
728x90

오늘의 알고리즘 오류 상황

 

문제 : 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요.

 

public class Solution
{
    public long[] solution(int x, int n)
    {
        long[] answer = new long[n];

        for (int i = 0; i < n; i++)
        {
            answer[i] = x + x * i;
        }
        return answer;
    }
}

 

분명 문제의 조건에 위배되는 것도 없어보이는데

15문제 테스트 중 2개가 오류라며 알고리즘 통과 실패.

사실 글 쓰는 지금도 문제가 정확히 뭔지 이해가 되질 않는다.

 

public class Solution
{
    public long[] solution(int x, int n)
    {
        long[] answer = new long[n];

        for (int i = 0; i < n; i++)
        {
            if(i != 0)
            {
                answer[i] = x + answer[i-1];
            }
            else
            {
                answer[i] = x;
            }
        }
        return answer;
    }
}

 

알고리즘의 진행 방식을 살짝 틀어서 했더니 해결됐다.

 


팀 프로젝트 진행 상황

 

오늘은 오류 발생 건이 아예 없진 않았으나 대부분 빨리 해결해서

구현한 기능 위주로 TIL을 작성할까 싶다.

 

앞서 ItemManager의 대부분의 기능을 구현했기 때문에

오늘은 ItemManager가 빛을 발할 수 있는 인벤토리 및 상점 기능의

자세한 UI를 구현하는데 초점을 맞췄다.

 

1. 상점 기능 구현하기

 

지난 번 Utilities.AddLine과 Console.WriteLine의 혼용으로 인해

출력 순서가 꼬이는 문제는 전부 해결됐다.

 

위와 같이 의도한대로 깔끔하게 판매되는 아이템이 출력되는 것을 확인해 볼 수 있다.

 

아이템 구매 모드에선 골드를 아이템 가격에 맞게 지불해 아이템을 구입할 수 있다.

(테스트용 검은 한도 초과 시 기능 처리를 확인하기 위한 용도)

 

구입한 아이템은 아이템 판매 모드로 들어가서 산 가격의 85% 만큼을 돌려받고

아이템을 판매할 수 있다.

 

 

2. 인벤토리 구현하기

 

인벤토리에서 구입한 아이템 목록을 확인할 수 있다.

 

장착 관리 모드로 넘어가서 장착하지 않은 아이템을 착용하거나,

착용된 아이템을 해제할 수 있다.

 

 

 

3. 게임 진행 상황 저장하기(구현 예정)

 

Utilities의 LoadType과 SaveType을 이용한 인벤토리 상황 저장 기능이다.

인벤토리의 아이템 정보를 배열로 변환한 뒤,

구조체로 이루어진 데이터로 바꿔 json 확장자로 저장해서

다음번에 게임을 켤 때 로드하는 방식이다.

 

저장 기능은 잘 되는 것 같은데, 예외처리를 해 주지 않아서 다음과 같은 오류가 뜬다.

 

 

내일 오류가 뜨는 부분은 전부 해결하고,

미구현 기능도 구현해서 마감 시간 전에 제출을 목표로 하고 있다...


느낀 점

 

주말에 걸렸던 감기가 사실은 코로나(...) 였다는 걸 알게됐다.

오늘은 그래도 어제보다는 덜 해서 괜찮았는데 잠을 자도 피곤한 건 여전하다.

 

그래도 대부분의 기능을 구현하고 저장 기능을 제외하면

오류가 발생하지 않아서 굉장히 만족스러운 하루다.

 

그리고 내가 구현한 필드와 메서드는 항상 주석을 잘 달아야 한다고 느꼈다...

ItemManager의 GetFieldItem 메서드에 자세한 설명이 없고

더미코드를 까먹은 채 주석도 없이 내버려둬서...

해당 메서드의 기능을 오해해서 코드 병합 시 에러가 생기기도 했다.

 

항상 코드를 작성하면 남을 위해 주석과 설명을 다는 것을 잊지 말자...


 

240115-11:15
+ ItemManager.Mode 변수 추가(ShowShop, ShowInventory 노출 정보 관련)
+ Item_Data.json 파일의 'Cost'값이 제대로 들어오지 않던 문제 수정
240115-12:48
+ ShowInventory 장착 관리 모드 추가
+ ShowShop 아이템 판매 기능 추가

 

이외 여러 개의 commit 들...

728x90