Shapes & Beats / C 콘솔 프로젝트 (게임인재원)

2023. 4. 28. 00:10게임/내가 만든 게임

 

게임플레이 영상

Shapes & Beats

1. 게임플레이

게임플레이 방법은 방향키로 이동하고 대시로 음악에 맞춰 나오는 다양한 패턴들을 피하는 게임이다. Just Shapes & Beats를 모작한 게임으로 콘솔프로젝트로 C언어를 기반으로 제작하였다. 

2. 개발 과정

게임인재원 1학기에 시작한 미니 프로젝트로 Win32API 라는 거대한 팀프로젝트 이전에 진행한 프로젝트이다. 처음에는 만들고 싶은 게임이 있었는데 여러 가지 이유로 미뤘고 옆자리 사람의 수학을 이용한 다양한 움직임을 구현하고 싶다는 말에 나도 같이 참여하게 되었고 총 3명이서 2주 동안 프로젝트를 진행하였다. 처음에는 C언어로 프로젝트를 진행해야 해서 막막하고 어려웠지만 다양한 방법으로 문제들을 해결하였다.

1. C언어는 Class 가 없다

지금까지 항상 클래스를 사용해서 코드를 작성했었는데 C에서는 Class가 없었다. 이러한 문제로 다양한 오브젝트들을 구현해야하는 게임에서는 필연적으로 C++의 객체지향적인 Class를 C에서 유사하게 구현해야 했다. 클래스의 멤버함수는 결국 함수 포인터로 구현한다는 것을 알고 있었기 때문에 함수 포인터를 이용해서 struct에서 다형성을 구현했다.

오브젝트마다 Update (수학적인 움직임) , Render(화면 출력)은 다르기 때문에 오브젝트마다 각각의 함수들을 만들어 주었고 Object_Init이라는 함수를 만들어서 가장 처음에 생성단계에서 초기화를 해주었다. 이러한 결과로 오브젝트들은 자신만의 Update함수와 Render함수를 가지고 게임 속에서 오브젝트들의 다양한 움직임을 구현하였다. 물론 Scene에서도 같은 방법으로  Scene도 관리했다.

2.  오브젝트 관리

이 게임은 다양한 오브젝트들을 플레이어가 리듬에 맞춰 피하는 게임으로 충돌, 오브젝트 추가, 삭제 등의 2가지 중요한 문제들이 있었다. 먼저 충돌 문제의 경우에는 배열은 초기화해서 오브젝트들이 있는 위치를 체크하고 플레이어의 위치를 확인하고 충돌처리를 해주었다. 이과정에서 그리기와 충돌처리를 같이하여 함수를 충돌과 그리기를 같이 처리하게 해주는 함수를 설계하였다.

2번째로는 오브젝트의 추가와 삭제이다 다양한 패턴들이 발생하는 만큼 오브젝트들의 추가와 삭제가 용이해야하는데  이 게임에서의 패턴들은 대부분 생성과 함께 삭제도 같이 해주어야 하는 특징을 가지므로 추가와 동시에 언제 삭제할지에 대한 처리를 같이해주는 함수로 해결하였다. 

한 프레임에 오브젝트가 100개 이상 출력하는 것은 오류라고 생각해서 경고처리를 해주었다. 이후에는 EveneMgr는 게임 루프 마지막에서 삭제하는 오브젝트들을 따로 관리해서 삭제 시간이 지나면 삭제해 주었다. 

3. 소감

이번에도 팀 프로젝트로 진행하였는데 확실히 팀프로젝트가 논의도 많이해야하고 내가 부족한 부분을 채워나갈 수 있다는 점에서도 굉장히 좋았다. UI, 게임 패턴 박자등 다양한 면에서 도움을 얻었다. 결과적으로 만족하는 게임을 완성하였고 게임 구조를 설계하는 좋은 경험을 할 수 있었다. 다음 Win32 때는 큰 프로젝트인 만큼 그전까지 준비를 많이 해서 참여하고 싶다.