MFC 기반 팩맨게임 만들기
1980년 5월 일본의 남코라는 회사에서 만든 팩맨 게임을 C++을 이용해 만든
예제입니다.
심화반 고등학생이 정한 주제를 저도 함께 만들어 보았으며, 생각보다 좀
어려웠습니다.
기억나는 몇 가지 어려웠던 부분은,
맵의 크기를 너무 작게 설정하면, 팩맨과 적군의 움직임을 부드럽게 표현하기
어려워, 개발 도중 배경맵의 크기를 키운점.
적군이 팩맨을 추격하는 간단한 인공지능 만들기.
적군이 팩맨에게 죽었을때 적군아지트로 이동시키기 위해 경로 탐색알고리즘이
필요했던 부분 등.
개발 과정을 요약해 정리해 보겠습니다.
1. 배경 맵을 2차원 배열로 만들어 각 셀 별로 상태를 저장 (빈곳, 벽, 먹이가 있는 곳 등)
2. 그래픽을 처리하기 위해 각 셀의 좌표를 모두 저장 (팩맨, 벽, 빈공간, 적군, 먹이, 등을 그리기 위함)
3. 적군과 팩맨을 위한 부모 클래스 생성(추상화 클래스)
4. 적군, 팩맨 자식 클래스를 상속을 통해 구현 (자신의 좌표, 팩맨의 공격모드 인지 저장 등)
5. 게임 시작시 팩맨과 적군을 배치하고 남는 공간에 먹이를 배치
6. 팩맨의 이동을 키보드 이벤트를 통해 처리 (현재 위치의 좌표에서 다음 이동방향으로 이동가능한지 판단 후, 벽이아니라면 좌표이동 등)
7. 적군의 이동을 만들어 내기 위한 2가지 알고리즘 생성 (확율에 기반한 팩맨 쫓아가기, 적군이 아지트에 있는 경우는 아지트 탈출하기)
8. 팩맨과 적군의 접촉 감지 (팩맨은 큰 먹이를 먹으면 적군을 잡아먹을 수 있으므로 상황에 맞는 처리가 필요)
9. 팩맨이 죽은 경우(생명의 수 만큼 다시 시작), 적군이 죽은 경우 처리 (경로 탐색 알고리즘, A 스타를 이용해 적군 아지트로 이동시키기)
10. 맵에 존재하는 모든 먹이를 다 먹은 경우 게임 승리 판정
개발 과정을 요약해 정리해 보겠습니다.
1. 배경 맵을 2차원 배열로 만들어 각 셀 별로 상태를 저장 (빈곳, 벽, 먹이가 있는 곳 등)
2. 그래픽을 처리하기 위해 각 셀의 좌표를 모두 저장 (팩맨, 벽, 빈공간, 적군, 먹이, 등을 그리기 위함)
3. 적군과 팩맨을 위한 부모 클래스 생성(추상화 클래스)
4. 적군, 팩맨 자식 클래스를 상속을 통해 구현 (자신의 좌표, 팩맨의 공격모드 인지 저장 등)
5. 게임 시작시 팩맨과 적군을 배치하고 남는 공간에 먹이를 배치
6. 팩맨의 이동을 키보드 이벤트를 통해 처리 (현재 위치의 좌표에서 다음 이동방향으로 이동가능한지 판단 후, 벽이아니라면 좌표이동 등)
7. 적군의 이동을 만들어 내기 위한 2가지 알고리즘 생성 (확율에 기반한 팩맨 쫓아가기, 적군이 아지트에 있는 경우는 아지트 탈출하기)
8. 팩맨과 적군의 접촉 감지 (팩맨은 큰 먹이를 먹으면 적군을 잡아먹을 수 있으므로 상황에 맞는 처리가 필요)
9. 팩맨이 죽은 경우(생명의 수 만큼 다시 시작), 적군이 죽은 경우 처리 (경로 탐색 알고리즘, A 스타를 이용해 적군 아지트로 이동시키기)
10. 맵에 존재하는 모든 먹이를 다 먹은 경우 게임 승리 판정
소스코드에 주석을 최대한 많이 달아 두었습니다.
참조해 여러분의 프로그래밍 능력향상에 도움이 되었으면 합니다.
- 개발환경 : Microsoft Visual Studio 2015, Windows 10 Pro 64bit
- 개발언어 : C++, MFC
- 핵심 적용 기술, 환경
- Device Context, GDI, Raster Operation, Double Buffering (깜빡임방지)
- SDI (Single Document Interface)
- Windows Message (Keyboard, Command Message)
- Thread (C++ 11 std::thread & MFC Thread)
- Class Inheritance (클래스 상속)
- Media Control Interface (소리재생을 위해)
- A스타 알고리즘 (경로찾기)
- 해상도를 고려한 Resize 처리
- 첨부파일
- 설치파일 (Installshield로 제작된 설치파일, 클릭)
- 소스코드 (C++ 소스코드, rar 압축파일형태, 클릭)
- 구글아이디로 로그인하면 다운로드 가능합니다.
댓글
댓글 쓰기