신규 블로그를 만들었습니다!
3x3 퍼즐 게임
어렸을 적 한번쯤은 해봤을 퍼즐 게임입니다. 해당 글에서는 3x3 크기의 퍼즐을 만들어 봅니다.
처음에는 맨 하단 우측(좌표 2, 2)에서 시작합니다.
키보드를 이용하여 현재위치를 바꿈과 동시에 값을 바꿉니다.
위에서부터 오른쪽으로 1 ~ 9 까지 숫자가 순차적으로 나열된다면, 게임이 끝납니다.
소스코드
#include <stdio.h>
#include <termio.h>
#include <stdlib.h>
#define UP 65
#define DOWN 66
#define LEFT 68
#define RIGHT 67
#define N 3
#define M 3
int getch(void){
int ch;
struct termios buf, save;
tcgetattr(0,&save);
buf = save;
buf.c_lflag &= ~(ICANON|ECHO);
buf.c_cc[VMIN] = 1;
buf.c_cc[VTIME] = 0;
tcsetattr(0, TCSAFLUSH, &buf);
ch = getchar();
tcsetattr(0, TCSAFLUSH, &save);
return ch;
}
int getKeyboard(){
int keyboard = getch();
if(keyboard == 91){
return getch();
}
return 0;
}
void printMap(int puzzle[N][M]){
system("clear");
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
if(puzzle[i][j] != 0){
printf("%2d", puzzle[i][j]);
}else{
printf(" ");
}
}// end for j
printf("\n");
}//end for i
}
int isClear(int puzzle[N][M]){
for(int i=0; i<N; i++){
for(int j=0; j<M; j++){
if(puzzle[i][j] != i*N + j + 1){
return 0;
}
}
}
return 1;
}
int main(void){
int puzzle[N][M] = { { 9,1,8 },
{ 6,2,3 },
{ 4,5,7 } };
int curRow = 2;
int curCol = 2;
int keyboard = 0;
int temp = 0;
while (!isClear(puzzle)){
printMap(puzzle);
printf("\n현재위치 : %d, %d\n", curRow, curCol);
keyboard = getKeyboard();
//printf("%2d", keyboard);
switch(keyboard){
case UP:
if(curRow > 0){
temp = puzzle[curRow][curCol];
puzzle[curRow][curCol] = puzzle[curRow-1][curCol];
puzzle[curRow-1][curCol] = temp;
curRow--;
}
break;
case DOWN:
if(curRow < N-1){
temp = puzzle[curRow][curCol];
puzzle[curRow][curCol] = puzzle[curRow+1][curCol];
puzzle[curRow+1][curCol] = temp;
curRow++;
}
break;
case LEFT:
if(curCol > 0){
temp = puzzle[curRow][curCol];
puzzle[curRow][curCol] = puzzle[curRow][curCol-1];
puzzle[curRow][curCol-1] = temp;
curCol--;
}
break;
case RIGHT:
if(curCol < M-1){
temp = puzzle[curRow][curCol];
puzzle[curRow][curCol] = puzzle[curRow][curCol+1];
puzzle[curRow][curCol+1] = temp;
curCol++;
}
break;
}
}
printf("clear");
return 0;
}
관련 글
2018/02/22 - [Language/C&C++] - C++ :: 야구 게임(Baseball) 프로그램 만들기
'Language > C&C++' 카테고리의 다른 글
C++ :: STL sort() 함수 다루기, 오름차순 내림차순, 학생 점수 순서대로 나열하기 (10) | 2018.04.29 |
---|---|
C++ :: 연산자 (사칙 연산자, 관계 연산자, 논리 연산자) (0) | 2018.03.02 |
C++ :: 야구 게임(Baseball) 프로그램 만들기 (1) | 2018.02.22 |
C++ :: 간단한 로또 프로그램 만들기! (1) | 2018.02.22 |
C++ :: 함수를 이용한 변수 초기화 방법 #4 (0) | 2018.02.18 |
최근댓글