개요
조건
10 * 10 크기의 맵을 구성한다. (2차원 배열) 플레이어가 존재한다. 플레이어 시작 지점 : (0,0) 탈출지점이 존재한다. 탈출지점 : 플레이어 시작 지점을 제외한 랜덤 설정 WASD 키입력을 통해 플레이어를 이동시킨다. O가 E에 도달하면 "탈출에 성공했습니다." 프로그램 종료 |
FlowChart
만들자
1. 초기 세팅
// 초기 세팅
srand(time(NULL));
// 스테이지
int stage = 1;
//맵
int mapSizeX = 10;
int mapSizeY = 10;
int map[10][10]; // 맵을 10 * 10으로 만들어주자.
int mapValue = 0;
//플레이어 변수
int player; // 플레이어 좌표 0
char imgPlayer = 'O';
//탈출지점 변수
int goal; // 탈출지점 좌표
char imgGoal = 'E';
// 맵 좌표 생성
char imgMap = '#';
for (int x = 0; x < mapSizeX; x++)
{
for (int y = 0; y < mapSizeY; y++)
{
map[x][y] = mapValue;
mapValue++;
}
}
// 플레이어 초기 위치 세팅 (0,0)
player = 0;
// 초기 탈출지점 위치 세팅 (플레이어 자리를 제외한 위치)
while (true)
{
int x = rand() % mapValue;
if (player != x) // 좌표가 동일하지 않으면 넣어줌
{
goal = x;
break;
}
}
2. 맵 표시 (초기)
// 초기 맵 표시
system("cls"); // 맵 삭제 안해도 되지만 통일해봄
cout << "[ " << stage << "Stage ]" << endl;
for (int y = 0; y < mapSizeY; y++)
{
for (int x = 0; x < mapSizeX; x++)
{
if (map[x][y] == player) // 플레이어
{
cout << imgPlayer;
}
else if (map[x][y] == goal) // 탈출지점
{
cout << imgGoal;
}
else // 그 외 맵
{
cout << imgMap;
}
}
cout << endl;
}
3. 플레이어 이동
// 이동
int inputKey = _getch();
if (inputKey >= 97 && inputKey <= 122)
{
inputKey -= 32;
}
// WASD switch 문을 사용하여 새로운 좌표를 받아 player좌표에 넣어준다.
// 이동할 공간이 없으면 무시한다.
int newValue = player; // 새로 받을 좌표
switch (inputKey)
{
case 87: //W
for (int x = 0; x < mapSizeX; x++)
{
for (int y = 0; y < mapSizeY; y++)
{
if (map[x][y] == player)
{
if (y - 1 >= 0)
{
newValue = map[x][y - 1];
break;
}
}
}
}
player = newValue;
break;
case 83: //S
for (int x = 0; x < mapSizeX; x++)
{
for (int y = 0; y < mapSizeY; y++)
{
if (map[x][y] == player)
{
if (y + 1 <= mapSizeY - 1)
{
newValue = map[x][y + 1];
break;
}
}
}
}
player = newValue;
break;
case 65: //A
for (int x = 0; x < mapSizeX; x++)
{
for (int y = 0; y < mapSizeY; y++)
{
if (map[x][y] == player)
{
if (x - 1 >= 0)
{
newValue = map[x - 1][y];
break;
}
}
}
}
player = newValue;
break;
case 68: //D
for (int x = 0; x < mapSizeX; x++)
{
for (int y = 0; y < mapSizeY; y++)
{
if (map[x][y] == player)
{
if (x + 1 <= mapSizeX - 1)
{
newValue = map[x + 1][y];
break;
}
}
}
}
player = newValue;
break;
default:
break;
}
4. 맵 표시
// 맵 표시
system("cls"); // 맵 삭제
cout << "[ " << stage << "Stage ]" << endl;
for (int y = 0; y < mapSizeY; y++)
{
for (int x = 0; x < mapSizeX; x++)
{
if (map[x][y] == player) // 플레이어
{
cout << imgPlayer;
}
else if (map[x][y] == goal) // 탈출지점
{
cout << imgGoal;
}
else // 그 외 맵
{
cout << imgMap;
}
}
cout << endl;
}
5. 도착지점 판단
// 골인
if (player == goal)
{
cout << "승리했습니다.";
stage++; // 스테이지 카운트 증가
break;
}
(+) 번외편 : 다음 스테이지 할건가요?
// 더 할건가요??
cout << "게임을 계속 하시겠습니까?......(y/n)" << endl;
char continueGame = _getch();
// n,N 누르면 종료, 나머지는 계속하기, 잘 못 눌러도 계속 하기ㅋ
if (continueGame == 'n' || continueGame == 'N')
{
cout << "게임을 종료합니다.\n";
break;
}
728x90
'Program > C (C++,C#)' 카테고리의 다른 글
C언어 프로그래밍 (0) | 2022.04.25 |
---|---|
[C++] 구조체 (0) | 2022.04.15 |
[C++] 배열 (0) | 2022.04.13 |
[C++] 구구단 & 별찍기 (0) | 2022.04.12 |
[C++] 제어문 (0) | 2022.04.12 |