#include<iostream>
#include<conio.h>
#include<time.h>
#include <fstream>
#include <windows.h> // Sleep 쓸라고
using namespace std;
#define LEFT 75// 좌측방향키
#define RIGHT 77// 우측방향키
#define UP 72// 위쪽방향키
#define DOWN 80// 아래방향키
#define ESC 27 // ESC 키
int main(){
// 퍼즐게임
// 1 ~ 20 숫자를 가진 4x5 의 퍼즐에 숫자 1을
// 제일 우측하단에서 시작해서 방향키를 입력하면 움직이고(getch())
// 움직인 방향의 숫자와 위치를 바꾸고 벽인 방향으로 입력 시
// 움직이지 않는다.
int push, y = 3, x = 4, temp; // 누를 키값을 저장할 변수, 1의 행값 y, 열값 x, 임시 저장 변수
int puzzle[4][5] = { {18,9,14,4,7},
{2,8,10,5,6},
{15,12,3,16,19},
{20,11,17,13,1} };
do
{
cout << "퍼즐 게임" << endl;
printf("┌────────┐\n");
for (int i = 0; i < 4; i++) {
printf("│ ");
for (int j = 0; j < 5; j++) {
printf("%2d ", puzzle[i][j]);
}
printf("│\n");
}
printf("└────────┘\n");
push = getch();
switch (push)
{
case LEFT: // 왼쪽
if (x > 0) { // 왼쪽에 숫자가 있는 경우만 실행
temp = puzzle[y][x];
puzzle[y][x] = puzzle[y][x - 1];
puzzle[y][x - 1] = temp;
x -= 1;
}
break;
case RIGHT: // 오른쪽
if (x < 4) { // 오른쪽에 숫자가 있는 경우만 실행
temp = puzzle[y][x];
puzzle[y][x] = puzzle[y][x + 1];
puzzle[y][x + 1] = temp;
x += 1;
}
break;
case UP: // 위쪽
if (y > 0) { // 위쪽에 숫자가 있는 경우만 실행
temp = puzzle[y][x];
puzzle[y][x] = puzzle[y - 1][x];
puzzle[y - 1][x] = temp;
y -= 1;
}
break;
case DOWN: // 아래쪽
if (y < 3) { // 아래쪽에 숫자가 있는 경우만 실행
temp = puzzle[y][x];
puzzle[y][x] = puzzle[y + 1][x];
puzzle[y + 1][x] = temp;
y += 1;
}
break;
case ESC: // ESC
break;
}
system("cls");
} while (push != ESC);
return 0;
}
// ㅡㅡ 실행 화면 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ