[포트폴리오 / Console] Yacht_MiniGame 콘솔 프로젝트 완

⭐ MiniGame

 

분명 이전 포스팅이 프로젝트 구상 단계였는데 왜 바로 완료 단계인지에 대해선 마지막에 설명하도록 하겠습니다..

먼저 이번 콘솔 프로젝트에 대해서 간략하게 설명드리면

아주 유명한 주사위 게임인 야추(야찌)를 플레이할 수 있는 프로젝트입니다.

 

 

Singleton을 이용한 매니저 클래스 뼈대 만들기


각각의 기능들을 총괄하는 매니저 클래스들은 대부분 하나만 존재한다는 특징이 있습니다.

대표적으로 게임의 전체를 관리하는 게임매니저, 사운드 재생을 담당하는 사운드 매니저 등이 있습니다.

이러한 매니저들을 쉽게 선언하고 만들기 위해 제네릭을 이용해 Singleton.cs 클래스를 구현해 사용했습니다.

Singleton.cs

 

 

NuGet을 이용한 사운드 재생


게임에는 역시 사운드가 들어가 있어야 훨씬 생동감 있고 몰입이 된다고 생각해서 Nuget 패키지에서 NAudio를 설치해

사운드를 재생하는 기능을 만들었습니다.

브금은 특성상 재생이 완료될 경우 다시 처음으로 돌아가 반복 재생하며,

효과음의 경우 1회성으로 사운드가 재생될 때 객체를 생성해 출력 후 바로 회수합니다.

 

브금 재생

 

효과음 재생

 

야추(야찌) 게임


● 1~5번 키를 누르면 해당 숫자에 맞는 주사위가 선택 / 선택 해제 되며 선택된 주사위는 리롤 시 굴리지 않습니다.

● 위아래 방향키를 이용해 점수를 넣을 족보를 선택할 수 있으며 엔터키를 눌러 점수를 기입할 수 있습니다.

● 좌측의 점수판에서 점수가 기입된 경우 초록색 문자가 출력됩니다.

● 총 13 턴의 차례가 있으며, 플레이어 1 → 플레이어 2 순서로 플레이할 수 있습니다.

 

 

가장 중요한 메인 게임으로 상태패턴을 이용해 게임의 단계를 관리했습니다.

주사위의 숫자와 선택되었는지 체크하는 프로퍼티를 가지는 다이스 객체를 5개 생성한 뒤

주사위를 리롤할 수 있습니다.

Dice.cs의 일부분

 

리롤한 뒤에는 각 주사위의 숫자가 무엇인지 카운트해 줄 7개 요소의 배열에 각 숫자를 넣어줍니다.

(예를 들어 주사위의 숫자가 각각 3, 5, 2, 2, 6 일 경우 위의 배열은 {0, 0, 2, 1, 0, 1, 1}의 값을 가지게 됩니다. 주사위는 0이 없기 때문에 0번째 인덱스는 항상 0임)

숫자가 카운트된 배열을 이용해 각 족보별 얻을 수 있는 점수를 계산합니다.

족보 계산 메서드의 일부분

 

각 족보의 점수를 저장할 수 있는 플레이어 점수 클래스를 이용해 점수를 관리합니다.

 

여기서 int형을 이용해 점수를 저장하게 되면 문제가 생깁니다.

플레이어는 상황에 따라 전략적으로 0점을 기입하는 경우가 생기게 되는데 이 경우 0점이 기입된 변수인지 점수를 기입하지 않은 변수인지 구분할 수 없게 됩니다.

bool 변수를 이용해 구분할 수 있겠지만 족보의 개수만큼 bool 변수를 선언해야 하기 때문에 비효율적이라 판단하였고,

int?(널러블)을 이용해 점수가 기입된 경우에는 0, 기입되지 않은 경우는 null값인 점을 이용해 구분하였습니다.

YachtBoard.cs

 

 

 

 

전체 플레이 영상


야추 게임 플레이 영상

여담으로 서론에서 얘기한 갑자기 완료 단계의 글을 쓰게 되는 이유에 대해서 설명하자면..

감기몸살에 심하게 걸려 연휴 기간을 통으로 앓아누워있었다..

기획 단계에서도 두통에 컨디션이 구려져서 싸했었는데 이 정도로 아플 줄은 몰랐다ㅜ

결국 마감 전날 수액 버프로 겨우겨우 야추 게임이라도 만들어 냈지만

거창하게 기획했던 내용에 비하면 너무 아쉽다는 생각만 든다.

 

환절기라 그런 탓도 있겠지만 얼른 취업하고 싶다는 생각에 매일 수업과 별개로 새벽까지 공부 + 개인 프로젝트를 준비하며

새벽에 잠들다 보니 몸도 많이 허약해져 있었던 것 같다.

아무래도 기본 지식이 있는 상태에서 수업을 듣다 보니 수업과 별개로 다른 지식도 빨리 더 쌓고 여러 기능을 구현해 보며

기술을 쌓아나가야지 하는 조급함이 생겼다.

그렇다고 수업이 도움 되지 않는 것은 절대 아니다.

개념을 알았지만 근본적으로 왜 그런가에 대한 지식도 많이 쌓이고 있고 어떤 방식으로 코드를 작성해야 좋은지에 대해서

갈피를 잡지 못하고 있었지만 수업을 들으면서 점점 방향성이 잡히고 있다.

무엇보다 기본 지식이 매우 중요한 분야로서 기본을 다지는 건 언제든 좋다고 생각한다.

 

개인적으로 너무 아쉬운 프로젝트 기간이었던건 분명하지만,

이 경험을 밑바탕으로 다음 프로젝트까지는 컨디션 관리에 좀 신경 써야겠다.

그리고 개인 프로젝트 기간을 늘리더라도 하루에 할애할 시간을 조금 줄여야겠다.

 

이제 유니티를 본격적으로 배우는 만큼

내가 유니티 기술이나 지식에서 부족했던 부분을 몽땅 배우고 실력을 쌓을 생각이다.

 

말이 너무 길어졌지만 결론은 건강이 최우선!!

이 글을 읽는 모든 분들도 항상 건강하시고 몸 조심하세요

다음 프로젝트는 멋진 프로젝트를 들고 오겠습니다.