Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define N 4
- void renderer(int puzzle[N][N]){
- int i, j;
- printf("_____________\n");
- for(i=0;i<N;i++){
- printf("|");
- for(j=0;j<N;j++){
- if(puzzle[i][j]!=16) printf("%2d|", puzzle[i][j]);
- else printf(" |");
- }
- printf("\n");
- printf("_____________\n");
- }
- }
- void swap(int *a, int *b){
- int temp = *a;
- *a = *b;
- *b = temp;
- }
- void randomize(int puzzle[N][N], int *posx, int *posy){
- int i, j, x, y;
- srand((unsigned) time(NULL));
- for(i=0;i<N;i++){
- for(j=0;j<N;j++){
- x = rand() % N;
- y = rand() % N;
- swap(&puzzle[y][x], &puzzle[i][j]);
- if (puzzle[y][x] == 16){
- *posx = x;
- *posy = y;
- }
- else if (puzzle[i][j] == 16){
- *posx = j;
- *posy = i;
- }
- }
- }
- }
- int wincheck(int puzzle[N][N]){
- int i, j;
- for(i=0;i<N;i++){
- for(j=0;j<N;j++){
- if(puzzle[i][j] != i*4+j+1) return 0;
- }
- }
- return 1;
- }
- main(){
- int puzzle[N][N], x, y, i, j;
- char ch;
- for(i=0;i<N;i++){
- for (j=0;j<N;j++){
- puzzle[i][j] = i*4+j+1;
- }
- }
- randomize(puzzle, &x, &y);
- while(ch != 27){
- renderer(puzzle);
- if(wincheck(puzzle)){printf("You win!\n"); break;}
- printf("Your move: ");
- ch = getchar();
- ch = toupper(ch);
- switch (ch){
- case 'W':{
- if(y+1 < N){swap(&puzzle[y][x], &puzzle[y+1][x]); y++;}
- else printf("Illegal move.\n");
- break; }
- case 'A':{
- if(x+1 < N){swap(&puzzle[y][x], &puzzle[y][x+1]); x++;}
- else printf("Illegal move.\n");
- break;}
- case 'S':{
- if(y-1 >=0){swap(&puzzle[y][x], &puzzle[y-1][x]); --y;}
- else printf("Illegal move.\n");
- break;}
- case 'D':{
- if(x-1 >=0){swap(&puzzle[y][x], &puzzle[y][x-1]); --x;}
- else printf("Illegal move.\n");
- break;}
- case 27:{printf("Exiting...\n"); break;}
- default: printf("Invalid input.\n");
- }
- getchar();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement