1. 구현 목표

  • 10 * 10 크기의 맵을 만든다. (2차원 배열)
  • 플레이어(대문자 O)는 WASD 입력을 통해 상하좌우 이동을 할 수 있다.
  • 플레이어 시작점은 (0, 0)이다.
  • 탈출지점(E) 은 (0, 0) 구간을 제외한 나머지 구간에 랜덤으로 설정된다.
  • O가 탈출지점(E)에 도착했다면, “탈출했습니다.”를 출력하고 게임을 종료한다.

  1. 플레이어가 이동할 때마다 맵 데이터가 바뀐다. 맵에 플레이어가 보이게 출력한다.
  2. 탈출지점 위치도 맵에 보이게 출력한다.
  3. WASD 키를 눌렀을 때 플레이어는 이동하면서 위치가 수정된다. (단, 맵을 벗어나지 않도록 예외처리가 필요하다.)
  4. 플레이어의 위치와 탈출 위치는 맵에서 계속 확인이 되어야한다.

출력 예시

2. 구현 결과 및 소스코드

#include <iostream>
#include <conio.h>
using namespace std;

int main()
{
	// 랜덤 시드 설정 (매번 탈출구 위치가 바뀌도록)
	srand(time(NULL));

	// 1. 맵 데이터 설정
	char escapeMap[10][10];
	int pY = 0, pX = 0;   // 플레이어 좌표 (시작점 0,0)
	int eY, eX;           // 탈출구 좌표

	// 탈출지점 랜덤 설정 (0,0 제외)
	do 
		{
			eY = rand() % 10;
			eX = rand() % 10;
		} 
	while (eY == 0 && eX == 0);

	// 2. 맵 출력 및 게임
	while (true)
	{
		// 맵 초기화 (매번 #으로 새로 채우기)
		for (int y = 0; y < 10; y++)
		{
			for (int x = 0; x < 10; x++)
			{
				escapeMap[y][x] = '#';
			}
		}

		// 탈출구와 플레이어를 맵 데이터에 기록
		escapeMap[eY][eX] = 'E';
		escapeMap[pY][pX] = 'O';

		system("cls"); // 화면 깜빡

		// 맵 출력
		for (int y = 0; y < 10; y++)
		{
			for (int x = 0; x < 10; x++)
			{
				cout << escapeMap[y][x];
			}
			cout << endl;
		}

		// 탈출 성공 여부 확인
		if (pY == eY && pX == eX)
		{
			cout << "탈출했습니다!" << endl;
			break;
		}

		// 3. 키 입력 및 좌표 수정
		int input = _getch(); // 키 입력 대기

		// wasd 이동 및 맵 범위 설정
		if (input == 'w') 
		{
			if (pY > 0) pY--;
		}
		else if (input == 's') 
		{
			if (pY < 9) pY++;
		}
		else if (input == 'a') 
		{
			if (pX > 0) pX--;
		}
		else if (input == 'd') 
		{
			if (pX < 9) pX++;
		}
	}
}

3. 구현 과정

  1. 우선 맵 데이터를 배열을 이용해서 10x10으로 설정하고 플레이어와 탈출구의 x, y 좌표 값을 정수 데이터 타입으로 설정 해놓습니다. 그리고 플레이어의 좌표 값은 (0,0) 이어야 하기 때문에 각각 0으로 설정 해줍니다.
  2. do while문을 통해 탈출구의 x, y 좌표가 랜덤으로 설정 되지만 (0,0)은 되지 않도록 설정 해줍니다.
  3. 탈출맵 배열의 모양을 #으로 설정해줍니다.
  4. 탈출맵의 플레이어의 모양과 탈출구의 모양을 각각 O와 E로 설정해줍니다.
  5. system(”cls”);를 이용해서 값을 입력 받을 때 마다 화면이 깜빡이도록 설정합니다.
  6. 다시 맵 출력 해주고 플레이어의 x, y 값과 탈출구의 x, y 값이 같으면 “탈출했습니다!”를 출력하게 설정합니다.
  7. wasd 각각의 키를 누를 때 마다 해당하는 방향으로 1칸씩 갈 수 있게 설정합니다. 그리고 맵 범위를 탈출 맵을 벗어나지 않게 비교연산자를 사용해서 설정합니다.

4. 문제 해결 방법

wasd 이동 부분에 블루프린트에서 배웠던 input keyboard w,a,s,d < 이것을 어떻게 코드로 구현할지 몰라서 ai를 이용해서 알아내고 활용해보았습니다.

0개의 댓글