Advertisement
Guest User

Untitled

a guest
Dec 22nd, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.90 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. #define N 4
  6.  
  7. void renderer(int puzzle[N][N]){
  8.     int i, j;
  9.    
  10.     printf("_____________\n");
  11.    
  12.     for(i=0;i<N;i++){
  13.         printf("|");
  14.         for(j=0;j<N;j++){
  15.             if(puzzle[i][j]!=16) printf("%2d|", puzzle[i][j]);
  16.             else printf("  |");
  17.         }
  18.         printf("\n");
  19.         printf("_____________\n");
  20.     }
  21. }
  22.  
  23. void swap(int *a, int *b){
  24.     int temp = *a;
  25.     *a = *b;
  26.     *b = temp;
  27. }
  28.  
  29. void randomize(int puzzle[N][N], int *posx, int *posy){
  30.     int i, j, x, y;
  31.  
  32.     srand((unsigned) time(NULL));
  33.     for(i=0;i<N;i++){
  34.         for(j=0;j<N;j++){
  35.             x = rand() % N;
  36.             y = rand() % N;
  37.             swap(&puzzle[y][x], &puzzle[i][j]);
  38.             if (puzzle[y][x] == 16){
  39.                 *posx = x;
  40.                 *posy = y;
  41.             }
  42.             else if (puzzle[i][j] == 16){
  43.                 *posx = j;
  44.                 *posy = i;
  45.             }
  46.  
  47.         }
  48.     }
  49. }
  50.  
  51. int wincheck(int puzzle[N][N]){
  52.     int i, j;
  53.    
  54.     for(i=0;i<N;i++){
  55.         for(j=0;j<N;j++){
  56.             if(puzzle[i][j] != i*4+j+1) return 0;
  57.         }
  58.     }
  59.  
  60.     return 1;
  61. }
  62.  
  63. main(){
  64.     int puzzle[N][N], x, y, i, j;
  65.     char ch;
  66.  
  67.     for(i=0;i<N;i++){
  68.         for (j=0;j<N;j++){
  69.             puzzle[i][j] = i*4+j+1;
  70.         }
  71.     }
  72.  
  73.     randomize(puzzle, &x, &y);
  74.  
  75.     while(ch != 27){
  76.         renderer(puzzle);
  77.         if(wincheck(puzzle)){printf("You win!\n"); break;}
  78.         printf("Your move: ");
  79.         ch = getchar();
  80.         ch = toupper(ch);
  81.         switch (ch){
  82.             case 'W':{
  83.                 if(y+1 < N){swap(&puzzle[y][x], &puzzle[y+1][x]); y++;}
  84.                 else printf("Illegal move.\n");
  85.                 break; }
  86.             case 'A':{
  87.                 if(x+1 < N){swap(&puzzle[y][x], &puzzle[y][x+1]); x++;}
  88.                 else printf("Illegal move.\n");
  89.                 break;}
  90.             case 'S':{
  91.                 if(y-1 >=0){swap(&puzzle[y][x], &puzzle[y-1][x]); --y;}
  92.                 else printf("Illegal move.\n");
  93.                 break;}
  94.             case 'D':{
  95.                 if(x-1 >=0){swap(&puzzle[y][x], &puzzle[y][x-1]); --x;}
  96.                 else printf("Illegal move.\n");
  97.                 break;}
  98.             case 27:{printf("Exiting...\n"); break;}
  99.             default: printf("Invalid input.\n");
  100.         }
  101.         getchar();
  102.     }
  103.  
  104.     return 0;
  105. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement