Keyboard 우측 키패드를 이용하여 간단한 Push-Push 게임을 만들어 보자.
#include<stdio.h>
#include<windows.h>
#define _for(A,a) for(a=0; a<A; a++)
#define map_VIEW(i,j)_for(YY,i){_for(XX,j)printf("%s",C[Game_Board[i][j]]);printf("\n");}printf("%d",cnt);
#define map_drow _for(YY,i) _for(XX,j){ if(i==0||i==YY-1||j==0||j==XX-1) Game_Board[i][j] = 1; }
#define YY 10
#define XX 10
#define up '8'
#define up_right '9'
#define right '6'
#define down_right '3'
#define down '2'
#define down_left '1'
#define left '4'
#define up_left '7'
#define ini 'z'
char *C[] = { " ", "□", "ㅋ", "○", "⊙","↓","↑","→","←","↘","↖","↗","↙"};
char Game_Board[YY][XX]= {0};
int cnt=0;
typedef struct ball{
int y;
int x;
}ball;
void ball_control(void);
void ball_control(void){
ball BALL[1];
BALL[0].x=6;BALL[0].y=6;
Game_Board[BALL[0].x][BALL[0].y]=3;
}
void gotoxy(int x, int y){
COORD Cur;
Cur.X = x;
Cur.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),Cur);
}
void main(int i, int j){
int mpx, mpy, pi=2;
int goal_x, goal_y;
char key;
BACK:
system("cls");
ball_control(); /////////////////////
mpx=1, mpy=1;
map_drow;
Game_Board[mpy][mpx]=pi;
gotoxy(0,0);
goal_x=2, goal_y=2;//////////////////
Game_Board[goal_x][goal_y]=4;
map_VIEW(i,j);
while(1){ key = getch();
if(key == ini)
goto BACK;
if(key == down){
if(Game_Board[mpy+1][mpx]==3 && ( Game_Board[mpy+2][mpx]==0 || Game_Board[mpy+2][mpx]==4))
Game_Board[mpy+2][mpx]=3;
else if(Game_Board[mpy+1][mpx]!=0) continue;
Game_Board[++mpy][mpx]=5, Game_Board[mpy-1][mpx]=0;
}
else if(key == up){
if(Game_Board[mpy-1][mpx]==3 && ( Game_Board[mpy-2][mpx]==0 || Game_Board[mpy-2][mpx]==4))
Game_Board[mpy-2][mpx]=3;
else if(Game_Board[mpy-1][mpx]!=0) continue;
Game_Board[--mpy][mpx]=6, Game_Board[mpy+1][mpx]=0;
}
else if(key == right){
if(Game_Board[mpy][mpx+1]==3 && ( Game_Board[mpy][mpx+2]==0 || Game_Board[mpy][mpx+2]==4))
Game_Board[mpy][mpx+2]=3;
else if(Game_Board[mpy][mpx+1]!=0) continue;
Game_Board[mpy][++mpx]=7, Game_Board[mpy][mpx-1]=0;
}
else if(key == left){
if(Game_Board[mpy][mpx-1]==3 && ( Game_Board[mpy][mpx-2]==0 || Game_Board[mpy][mpx-2]==4))
Game_Board[mpy][mpx-2]=3;
else if(Game_Board[mpy][mpx-1]!=0) continue;
Game_Board[mpy][--mpx]=8, Game_Board[mpy][mpx+1]=0;
}
else if(key == down_right){ if(Game_Board[mpy+1][mpx+1]!=0) continue;
Game_Board[++mpy][++mpx]=9, Game_Board[mpy-1][mpx-1]=0;
}
else if(key == up_left){ if(Game_Board[mpy-1][mpx-1]!=0) continue;
Game_Board[--mpy][--mpx]=10, Game_Board[mpy+1][mpx+1]=0;
}
else if(key == up_right){ if(Game_Board[mpy-1][mpx+1]!=0) continue;
Game_Board[--mpy][++mpx]=11, Game_Board[mpy+1][mpx-1]=0;
}
else if(key == down_left){ if(Game_Board[mpy+1][mpx-1]!=0) continue;
Game_Board[++mpy][--mpx]=12, Game_Board[mpy-1][mpx+1]=0;
}
cnt++;
//system("cls");
gotoxy(0,0);
map_VIEW(i,j);
if(Game_Board[goal_x][goal_y]==3) break;
if(key == 'q'){ puts(""); break;}
}
}