- 전체 코드 : CppStudy/CrazyArcade_Proto at main · Modisc/CppStudy (github.com)
(전체 코드가 긴 관계로 Github에 올려둔 링크를 첨부합니다)
2차원 배열에 미로를 할당하는 모습입니다.
2차원 배열을 사용할때는 머릿속에 행렬을 떠올리며 계산하면 좀 더 쉽습니다.
arr[n][n] 2차원 배열에서 arr 은 2차원 배열의 시작 주소를 의미하며, arr[n] 은 1차원 배열의 시작주소를 의미합니다.
각각의 문자에 해당하는 기호를 정해서 출력함으로써 미로를 만들어줍니다.
main 함수의 내용입니다.
미로를 설정하고, 미로를 출력한 후 사용자로부터 키를 입력받습니다.
이동을 담당하는 함수들입니다,
MovePlayer 함수에서 사용자로부터 입력받은 값에 따라 MoveUp, MoveDown, MoveLeft, MoveRight 를 호출합니다.
여기서는 MoveUp만 살펴보도록 하겠습니다.
1. 이동하려는 칸이 맵의 밖이 아닌지 체크한다.
2. 벽이나 폭탄이 아니라면 해당 칸으로 이동한다.
3. 벽밀기 아이템이 있을 경우, 벽밀기 아이템이 없을 경우로 나누어서 생각한다.
3-1. 먼저 벽밀기 아이템이 없고, 투명화 아이템이 있다면 이동하려는 칸이 무엇이든 해당 칸으로 이동할 수 있습니다.
3-2. 벽밀기 아이템이 있고, 이동하려는 칸이 벽이며, 현재 내가 있는 칸이 길일 경우 벽을 밀 수 있는지 체크하는 코드들을 실행합니다.
※ 현재 내가 있는 칸을 확인하는 이유는 투명화 아이템 때문입니다. 궁금하시다면 maze[player->pos.y][player->pos.x] == '1' 부분을 조건문에서 없애고 테스트 해보세요 ※
3-2-1. 현재 벽 밀기 기능이 On인지 Off인지 우선 체크합니다. Off이고 투명화 아이템이 있다면 그냥 이동하려는 칸으로 이동이 됩니다.
3-2-2. 벽을 밀어서 놔둘 칸이 맵 밖인지 아닌지 체크합니다.(여기선 윗윗칸) 맵 밖이라면 마찬가지로 투명화 아이템이 있을 경우에 대해 처리합니다.
3-2-3. 벽을 밀어서 놔둘 칸이 길이 맞는지 체크합니다. 길이 아니라면 마찬가지로 투명화 아이템이 있을 경우에 대해 처리합니다.
3-2-4. 위의 조건을 모두 만족할 경우 벽을 미는 코드를 실행합니다.
4. 다음으론 아이템이 있는 칸에 대한 처리입니다. 아이템이 있다면 해당 칸으로 그냥 이동하고 그 칸을 길로 변경합니다.
아이템 획득에 대한 코드는 아래에서 확인하겠습니다.
해당 칸의 값에 따라 어떤 아이템인지 체크하고, 그에 대한 처리를 진행합니다.
폭탄 폭발력의 경우 최대 5까지만 증가합니다.
벽밀기 아이템의 경우 처음 아이템을 획득하면 벽밀기 기능이 자동으로 On 됩니다.
설정된 값 이외의 값일 경우 false를 return 합니다.
폭탄을 설치하는 코드입니다.
폭탄 최대 설치개수 미만이고, 현재 내가 있는 칸이 벽이 아니라면 폭탄을 설치합니다.
단, 이미 내 위치에 폭탄이 있을 경우 중복 설치가 불가능하도록 설정하였습니다.
여기서 player의 위치값은 변경될 필요가 전혀 없으므로 const Player* 형을 매개변수로 사용합니다.
아래는 폭탄이 폭발한 경우에 대한 코드입니다.
1. 폭탄이 있었던 위치를 길로 변경합니다.
2. 플레이어가 폭탄과 같은 위치에 있거나, 폭발의 범위 안에 있었다면 플레이어를 시작지점으로 돌려보냅니다.(373, 380~381 라인, player->pos.x = player->pos.y = 0)
3. 폭발 범위 안의 벽을 파괴합니다.(길로 변경합니다)
3-1. 이 때, 아이템 드랍 확률을 설정하여 아이템을 드랍합니다.(길 대신 아이템 값으로 설정해줍니다)
4. 3의 과정을 가로, 세로 방향에 대해 수행합니다.
전체 코드를 최대한 자세하게 분석하기 위해 노력했습니다.
잘못된 부분이나 이상한 부분 혹은 모르겠는 부분이 있다면 편하게 댓글 달아주세요!
출처
※ 앞의 강의는 미로찾기에 가깝고 뒤의 강의는 아이템을 사용하면서
크레이지 아케이드 느낌이 강해져서, 링크는 중간 강의부터 첨부합니다.
참고하시려는 분들은 앞의 강의부터 참고해야 완성이 가능합니다. ※
(14) C언어/C++ 강의 40화 미로게임 3 폭탄 설치와 터트리기 [어소트락 게임아카데미] - YouTube
'C,C++ > 코드정리' 카테고리의 다른 글
[C/C++] TextRPG 파일 입출력 변환 (0) | 2022.09.28 |
---|---|
[C/C++] 미로 + 크레이지 아케이드 파일 입출력 구현 (1) | 2022.09.27 |
[C/C++] TextRPG 구현 (0) | 2022.09.16 |
[C/C++] 학생 관리 프로그램 만들기(feat. 구조체) (0) | 2022.09.16 |
[C/C++] 빙고 게임 AI 대전 (0) | 2022.09.08 |
댓글