Advertisement
aurko96

Checkers game

Jul 30th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.20 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2.  
  3. #define ROWS 8
  4. #define COLS 8
  5.  
  6. #define EMPTY 1
  7. #define RED 2
  8. #define BLACK 3
  9. #define REDKING 4
  10. #define BLACKKING 5
  11.  
  12.  
  13. #define ISRED(c)  (c == RED || c == REDKING)
  14. #define ISBLACK(c) (c == BLACK || c == BLACKKING))
  15. #define ISEMPTY(c) (c == 1)
  16.  
  17.  
  18. void printDisplay(int d[][COLS]);
  19. void swapIJKL(int d[ROWS][COLS], int i, int j, int k, int l);
  20. char value2symbol(int i);
  21. void printDisplayFancy(int d[][COLS]);
  22. int Playersturn(int d[][COLS], int player,int i,int j,int k,int l);
  23.  
  24. void printDisplayFancy(int d[][COLS])
  25. {
  26.     int rr, cc, pp;
  27.  
  28.     printf("  +---+---+---+---+---+---+---+---+\n");
  29.  
  30.     for (rr=0; rr<ROWS; ++rr)
  31.     {
  32.         printf("%d |", rr+1);
  33.         for (cc=0; cc<COLS; ++cc)
  34.         {
  35.             printf(" %c |", value2symbol(d[rr][cc]) );
  36.         }
  37.         printf("\n");
  38.         printf("  +---+---+---+---+---+---+---+---+\n");
  39.     }
  40.  
  41.     printf("    a   b   c   d   e   f   g   h\n");
  42. }
  43.  
  44. void swapIJKL(int d[ROWS][COLS], int i, int j, int k, int l)
  45. {
  46.     int temp;
  47.  
  48.     printf("SWAP: %d,%d to %d,%d\n", i, j, k, l);
  49.  
  50.     temp = d[i][j];
  51.  
  52.     d[i][j] = d[k][l];
  53.  
  54.     d[k][l] = temp;
  55.  
  56.  
  57. }
  58.  
  59.  
  60.  
  61. char value2symbol(int i)
  62. {
  63.  
  64.     switch(i)
  65.     {
  66.     case 0:
  67.             return ' ';
  68.         case 1:
  69.             return ' ';
  70.         case 2:
  71.             return '$';
  72.         case 3:
  73.             return '@';
  74.     }
  75.     return ('?');
  76. }
  77.  
  78. int Playersturn(int d[][COLS], int player,int i,int j,int k,int l)
  79. {
  80.     int jmp_r;
  81.     int jmp_c;
  82.  
  83.     if(player == RED){
  84.         printf("RED move from %d,%d to %d,%d\n", i, j, k, l);
  85.     } else {
  86.         printf("BLACK move from %d,%d to %d,%d\n", i, j, k, l);
  87.     }
  88.  
  89.     if(i < 0 && ROWS <= i){ // keeping in bounds
  90.         printf("i is out of bounds\n");
  91.         return -1;
  92.     }
  93.     if(j < 0 && COLS <= j){
  94.         printf("j is out of bound");
  95.         return -1;
  96.     }
  97.  
  98.     if(k < 0 && ROWS <= k){
  99.         printf("k is out of bounds");
  100.         return -1;
  101.  
  102.     }
  103.     if(l < 0 && COLS<= l){
  104.         printf("l is out of bounds\n");
  105.         return -1;
  106.     }
  107.  
  108.     // check player is moving his own piece.
  109.     if(player == RED){
  110.         if(d[i][j] != RED){
  111.             printf("move your own piece!\n");
  112.             return -1;
  113.         }
  114.     } else { //BLACK
  115.         if(d[i][j] != BLACK){
  116.             printf("move your own piece!\n");
  117.             return -1;
  118.         }
  119.     }
  120.  
  121.     //make sure they are umping to a empty loacation
  122.     if(d[k][l] != EMPTY){
  123.         printf("You must move to a empty location");
  124.         return -1;
  125.     }
  126.  
  127.  
  128.  
  129.  
  130.  
  131.     // make sure the vertical direction of the move is not illegal
  132.     if(player == RED){
  133.         //make sure he moves down
  134.         if(i >= k){
  135.             printf("RED player must move down\n");
  136.             return -1;
  137.         }
  138.     } else { //BLACK
  139.         // make sure player moves up
  140.         if(i <= k){
  141.             printf("BLACK player must move up\n");
  142.             return -1;
  143.         }
  144.     }
  145.  
  146.  
  147.     // check if it's a regular move
  148.     if(i - k == -1 || i - k == 1){
  149.         if(j - l == 1 || j - l == -1){
  150.             swapIJKL(d,i,j,k,l);
  151.             return 0;
  152.         }
  153.     }
  154.  
  155.     //check if it's a jump move
  156.     if(i - k == -2 || i - k == 2){
  157.         if(j - l == -2 || j - l == 2){
  158.             // check if the jump position is enemy
  159.             if(i < k){ // move down
  160.                 jmp_r = i + 1;
  161.             } else { // move up
  162.                 jmp_r = i - 1;
  163.             }
  164.             if(j < l){ // move down
  165.                 jmp_c = j + 1;
  166.             } else { // move up
  167.                 jmp_c = j - 1;
  168.             }
  169.  
  170.             if(player==RED && d[jmp_r][jmp_c]!=BLACK)
  171.             {
  172.                 printf("Enemeny is not Canadian at %d%d",jmp_r, jmp_c);
  173.                 return -1;
  174.             }
  175.             if(player==BLACK && d[jmp_r][jmp_c] != RED){
  176.                 printf("you can only jump over an enemy player\n");
  177.                 return -1;
  178.             }
  179.  
  180.             // we are sure the move is valid:
  181.             d[jmp_r][jmp_c] = 1;
  182.             swapIJKL(d,i,j,k,l);
  183.             return 0;
  184.         }
  185.     }
  186.  
  187.     printf("You can only move diagnally\n");
  188.     return -1;
  189.  
  190. }
  191.  
  192. int main()
  193. {
  194.     int r,c;
  195.     int pr, pb;
  196.     int i, k;
  197.     char j, l;
  198.     int d[ROWS][COLS]={
  199.     {0,2,0,2,0,2,0,2},
  200.     {2,0,2,0,2,0,2,0},
  201.     {0,2,0,2,0,2,0,2},
  202.     {1,0,1,0,1,0,1,0},
  203.     {0,1,0,1,0,1,0,1},
  204.     {3,0,3,0,3,0,3,0},
  205.     {0,3,0,3,0,3,0,3},
  206.     {3,0,3,0,3,0,3,0}};
  207.  
  208.     for(;;){
  209.         // display board
  210.         printDisplayFancy(d);
  211.         // red turn
  212.         while(1){
  213.             printf("Red's turn: ");
  214.             scanf("%d%c",&i,&j);
  215.             printf("to: ");
  216.  
  217.             scanf("%d%c",&k,&l);
  218.             system("cls");
  219.             //swapIJKL(d,i-1,j - 'a',k-1,l - 'a');
  220.             if(Playersturn(d, RED, i-1,j - 'a',k-1,l - 'a') == 0)
  221.                 break;
  222.             printf("Illegal move, try again\n");
  223.         }
  224.  
  225.         //check for win
  226.  
  227.         //display board
  228.         printDisplayFancy(d);
  229.         //black turn
  230.         while(1){
  231.             printf("Canada's turn: ");
  232.             scanf("%d%c",&i,&j);
  233.             printf("to :");
  234.  
  235.             scanf("%d%c",&k,&l);
  236.             system("cls");
  237.             //swapIJKL(d,i-1,j - 'a',k-1,l - 'a');
  238.             if(Playersturn(d, BLACK, i-1,j - 'a',k-1,l - 'a') == 0)
  239.                 break;
  240.             printf("Illegal move, try again\n");
  241.         }
  242.  
  243.         //check for win
  244.  
  245.     }
  246.  
  247.     getchar();
  248.     getchar();
  249.     return 0;
  250. }
  251.  
  252.  
  253.  
  254. /*
  255.  
  256.  
  257.     if(player == RED){
  258.         if(i - k == -1){
  259.             if(j - l == 1 || j - l == -1){
  260.                 if(d[k][l]==EMPTY){
  261.                     swapIJKL(d,i,j,k,l);
  262.                     return 0;
  263.                 } else {
  264.                     printf("Red must move to a empty location\n");
  265.                     return -1;
  266.                 }
  267.             }
  268.         }
  269.     } else { //BLACK
  270.         if(i - k == 1){
  271.             if(j - l == 1 || j - l == -1){
  272.                 if(d[k][l]==EMPTY){
  273.                     swapIJKL(d,i,j,k,l);
  274.                     return 0;
  275.                 } else {
  276.                     printf("Black must move to a empty location\n");
  277.                     return -1;
  278.                 }
  279.             }
  280.         }
  281.     }
  282.  
  283. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement