대망의 2주 팀 프로젝트!

까말·2020년 9월 7일
0

제목 : MoonLighter
장르 : 로그라이크 액션 RPG
스토리 :  ‘문라이터’는 영웅을 꿈꾸는 모험심 넘치는 상점 주인 윌의 
일상을 체험하는 로그라이크 액션 RPG이다. 플레이어는 보스를 포함한 다양한 적과 전투를 벌이고, 보물을 탐색하며, 리노카 마을을 복구해야 한다. 또한, 마을에서 상점을 운영하면서 아이템 판매, 판매 가격 책정, 골드 관리, 어시스턴트 고용 및 상점 업그레이드 등을 할 수 
있으며, 새로운 갑옷과 무기를 제작하고 장비에 마법을 부여할 수도 있다.

인원 : 5명
담당파트 : Player
제작기간 : 14일 (2주)
사용툴  : WinAPI, C++ Visual Studio
영상링크 : https://www.youtube.com/watch?v=pTelqnw-Cc8

기술

1. State(상태) 패턴

  • Player는 상태에 기반을 둔 행위를 클래스로 만들어 놓은 디자인 패턴 중 하나인 State 패턴을 사용하였습니다.
  • 상태별로 클래스가 나누어져 있어 관리가 쉬움.
  • 상태 패턴은 내부 상태 객체들이 캡슐화되어 외부에서 전혀 알 수 없게되고, 외부에서는 Context 객체의 각 Action들을 호출하기만 합니다.

상태 패턴 정리한 코드

2. 정규화(Normalization)

  • 정규화란 무언가를 하나로 표준화 시키거나 다른 것과 비교하기 쉽도록 바꾸는 것을 의미합니다. 
  • 정규화는 우선 벡터의 크기를 구한뒤, 그 길이로 좌표를 나눠주면 값이 구해집니다.
  • Player의 이동속도는 상,하,좌,우 모두 똑같이 적용했지만, 대각선으로 이동할때에는 두방향의 값이 계산되어 표준화치 값보다 이동속도가 증가되지만 정규화를 적용시켜 이동속도를 맞춰 주었습니다.

Player 대각선 이동을 정규화 적용 시킨 코드

정규화 구하는 식

3. Z-ORDER

  • Z-order란 어떤 창이나 객체들이 다른창이나 객체 뒤에 가려져야 하는지를 결정하는 방법
  • Player는 이미지 렌더 순서를 위해 Z-order를 적용하였고, 벡터를 통해 관리하며 필요한 정보들을 저장했습니다.
  • 저장후 축(z)값을 기준으로 리스트를 두개로 분할하여 정렬하는 Quick정렬 알고리즘으로 렌더시켰습니다.

Z-order적용된 이미지

Quick정렬로 적용한 Z-order 코드

4. 속성 타일 검출

  • Player의 이동방향에 따라 임의의 렉트 2~3개를 만들어 타일 검출하게 됩니다.
  • 타일 검출시에는 실제 플레이어가 어디있는지 좌표를 계산해주는 변수를 사용하여
    각 Player의 DIRECTION 마다 검출해 주었습니다.
  • 검출된 타일은 그 속성타일에 맞게 플레이어가 못움직이거나, 스테이지 변경등을 할 수 있습니다.
  • 스테이지 변경시에는 다른 속성의 타일을 주어 충돌처리하고 이동할수 있도록 적용하였습니다.

타일 2개, 스테이지 변경 속성 타일 이미지

타일 3개 검출 이미지

후기

  • 길고 긴 2주간의 팀 프로젝트 여정이 끝이났다. 처음에는 모든 게임의 요소들이 Player한테
    적용이 되다보니 시간이 부족하지 않을까? 생각했지만, 업무를 여러명이서 분담을 해서 작업을
    하니 생각보다 순조롭게 프로젝트를 마무리 할 수 있었다.
  • Player를 맡으면서 상태패턴, z-order 등의 기술들을 익히게 되어 좋았고 앞으로 취업준비를
    하는동안에도 틈틈히 다른 팀원들의 코드도 익혀 나가야겠다.
profile
취업준비중........!!

0개의 댓글