2012. 7. 13. 14:45
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <conio.h> #define MAX 4 #define UP 72 #define DOWN 80 #define RIGHT 77 #define LEFT 75 #define ESC 27 #define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) void check_bingo(int puzzle[][MAX]) { int cnt; if(puzzle[0][0]==0) { cnt=0; for(int i=0;i<MAX;i++) { for(int j=0;j<MAX;j++) { if(puzzle[i][j]==cnt) cnt++; } } } else { cnt=1; for(int i=0;i<MAX;i++) { for(int j=0;j<MAX;j++) { if(puzzle[i][j]==cnt) cnt++; } } } if(cnt==MAX*MAX) { printf("\n축하 성공"); } } void find_zero(int puzzle[][MAX],int *x,int *y) { int i,j; for( i = 0; i < MAX; i++ ) { for( j = 0; j < MAX; j++) { if(puzzle[i][j]==0) { *x = i; *y = j; } } } } void show_puzzle(int puzzle[][MAX]) { system("cls"); for(int i=0;i<MAX;i++) { for(int j=0;j<MAX;j++) { printf("\t%d\t",puzzle[i][j]); if(j==MAX-1) printf("\n\n\n"); } } } int check_same_num(int puzzle[][MAX],int num) { for(int i=0;i<MAX;i++) { for(int j=0; j<MAX;j++) { if(puzzle[i][j]==num) return 0; } } return 1; } void set_puzzle(int puzzle[][MAX]) { //랜덤하게 퍼즐을 구성 int num,p; for(int i=0;i<MAX;i++) { for(int j=0;j<MAX;j++) { num=((unsigned int)time(NULL)*rand())%(MAX*MAX); p=check_same_num(puzzle,num); if(p==1) {//같은수 체크 puzzle[i][j]=num; } else j--; } } } void start_puzzle(int puzzle[][MAX]) { int x,y; //0의 위치 int ch; int tmp; set_puzzle(puzzle); show_puzzle(puzzle); find_zero(puzzle,&x,&y); while(1) { printf("0을 기준으로 움지이시오(종료ESC)"); ch=getch(); if(ch==ESC) break; switch(ch) { case LEFT : //왼쪽이동 if(y-1<0) break; SWAP(puzzle[x][y-1],puzzle[x][y],tmp); y=y-1; break; case RIGHT : //오른쪽이동 if(y+1>=MAX) break; SWAP(puzzle[x][y+1],puzzle[x][y],tmp); y=y+1; break; case UP : //위로 이동 if(x-1<0) break; SWAP(puzzle[x-1][y],puzzle[x][y],tmp); x=x-1; break; case DOWN : //아래로 이동 if(x+1>=MAX) break; SWAP(puzzle[x+1][y],puzzle[x][y],tmp); x=x+1; break; } check_bingo(puzzle);//다 맞추어쓴지 검사 show_puzzle(puzzle); } } int main() { int puzzle[MAX][MAX]; char ch; while(1) { start_puzzle(puzzle); printf("\n계속 할 까요?(Y or N)"); ch=getch(); if(ch=='N' || ch=='n') break; } return 0; } |
'Language > C & C Plus' 카테고리의 다른 글
[C] 2차원 배열 초기화에 관한 TIP(Naver 지식 IN) (0) | 2012.07.13 |
---|---|
[C] 미로 게임(2가지 버전) 파일있음 (0) | 2012.07.13 |
[C] OX 게임(버그 좀 있음) (0) | 2012.07.13 |
[C] 몇초간 정지 시키기 (0) | 2012.07.13 |
[C] 포인터를 사용하여 다차원 배열을 함수에 전달하기 (0) | 2012.07.13 |