Advertisement
Guest User

TicTacToe.c

a guest
Dec 10th, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 7.25 KB | None | 0 0
  1. #include <stdlib.h>
  2.  
  3. #include "hw_md.h"
  4.  
  5. static int row;
  6. static int column;
  7. static int player;
  8. static int board[3][3];
  9. static char display_board[3][3];
  10.  
  11.  
  12. void TicTacToe(void)
  13. {
  14.     int i, j;
  15.  
  16.     row = 0;
  17.     column = 0;
  18.     player = 1;
  19.     for (i = 0; i < 3; i++)
  20.     {
  21.         for (j = 0; j < 3; j++)
  22.         {
  23.             board[i][j] = 0;
  24.             display_board[i][j] = ' ';
  25.         }
  26.     }
  27. }
  28.  
  29. int Pick_Player(void)
  30. {
  31.     return player;
  32. }
  33.  
  34. int Pick_Row(void)
  35. {
  36.     return row;
  37. }
  38.  
  39. int Pick_Column(void)
  40. {
  41.     return column;
  42. }
  43.  
  44. void Choice_by_Player(int a)
  45. {
  46.     player = a;
  47. }
  48.  
  49. void Choice_of_Row(int b)
  50. {
  51.     row = b;
  52. }
  53.  
  54. void Choice_of_Column(int c)
  55. {
  56.     column = c;
  57. }
  58.  
  59. int Check_Move(int row, int column)
  60. {
  61.     if ( board[row][column] != 0 )
  62.     {
  63.         put_str("Space occupied - Try Again", 0x4000, 20-13, 3);
  64.         delay(120);
  65.         put_str("                          ", 0x4000, 20-13, 3);
  66.         return 0;
  67.     }
  68.     else
  69.     {
  70.         board[row][column] = player;
  71.         return 1;
  72.     }
  73. }   // end of Check_Move
  74.  
  75. int Check_Board(void)
  76. {
  77.     int i = 0;
  78.  
  79.     // check for tie
  80.     for (i = 0; i < 9; i++)
  81.     {
  82.         if (board[i/3][i%3] == 0)
  83.             break;
  84.     } // end of for loop
  85.     if ( i == 9 )
  86.         return 3; // tie game!
  87.  
  88.     // check rows
  89.     if (( (board[0][0] == player) && (board[0][1] == player) && (board[0][2] == player) ) ||
  90.         ( (board[1][0] == player) && (board[1][1] == player) && (board[1][2] == player) ) ||
  91.         ( (board[2][0] == player) && (board[2][1] == player) && (board[2][2] == player) ))
  92.         return player;
  93.  
  94.     // check columns
  95.     if (( (board[0][0] == player) && (board[1][0] == player) && (board[2][0] == player) ) ||
  96.         ( (board[0][1] == player) && (board[1][1] == player) && (board[2][1] == player) ) ||
  97.         ( (board[0][2] == player) && (board[1][2] == player) && (board[2][2] == player) ))
  98.         return player;
  99.  
  100.     // check diagonals
  101.     if (( (board[0][0] == player) && (board[1][1] == player) && (board[2][2] == player) ) ||
  102.         ( (board[0][2] == player) && (board[1][1] == player) && (board[2][0] == player) ))
  103.         return player;
  104.  
  105.     return 0;
  106. } // end of Check_Board
  107.  
  108. void Clear_Board(void)
  109. {
  110.     int i, j;
  111.  
  112.     row = 0;
  113.     column = 0;
  114.     player = 1;
  115.     for (i = 0; i < 3; i++)
  116.     {
  117.         for (j = 0; j < 3; j++)
  118.         {
  119.             board[i][j] = 0;
  120.             display_board[i][j] = ' ';
  121.         }
  122.     }
  123. }
  124.  
  125. void Tic_Tac_Toe_Board(void)
  126. {
  127.     int row, column;
  128.  
  129.     put_str("\x80\x82\x82\x82\x88\x82\x82\x82\x88\x82\x82\x82\x85", 0x2000, 20-6, 6);
  130.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 7);
  131.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 8);
  132.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 9);
  133.     put_str("\x81\x82\x82\x82\x87\x82\x82\x82\x87\x82\x82\x82\x84", 0x2000, 20-6, 10);
  134.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 11);
  135.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 12);
  136.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 13);
  137.     put_str("\x81\x82\x82\x82\x87\x82\x82\x82\x87\x82\x82\x82\x84", 0x2000, 20-6, 14);
  138.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 15);
  139.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 16);
  140.     put_str("\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C\x20\x20\x20\x7C", 0x2000, 20-6, 17);
  141.     put_str("\x86\x82\x82\x82\x89\x82\x82\x82\x89\x82\x82\x82\x83", 0x2000, 20-6, 18);
  142.  
  143.     put_str("Current Player: ", 0x2000, 20-8, 21);
  144.     put_chr((player == 1) ? 'X' : 'O', 0x0000, 20+8, 21);
  145.  
  146.     for ( row = 0; row < 3; row ++)
  147.     {
  148.         for ( column = 0; column < 3; column++)
  149.         {
  150.             if ( board[row][column] == 0)
  151.             {
  152.                 display_board[row][column] = ' ';
  153.             }
  154.             if ( board[row][column] == 1)
  155.             {
  156.                 display_board[row][column] = 'X';
  157.             }
  158.             if ( board[row][column] == 2)
  159.             {
  160.                 display_board[row][column] = 'O';
  161.             }
  162.             put_chr(display_board[row][column], 0x0000, 20-6+2 + column*4, 6+2 + row*4);
  163.         }  // end of inner for loop
  164.     }  // end of outer for loop
  165.  
  166. }   // end of Tic_Tac_Toe_Board
  167.  
  168.  
  169. int main(void)
  170. {
  171.     int test;
  172.     int more = 1;
  173.     int row = 0;
  174.     int column= 0;
  175.     int player;
  176.     int check = 0;
  177.     short buttons = 0;
  178.  
  179.     TicTacToe();
  180.  
  181.     while ( more )
  182.     {
  183.         Tic_Tac_Toe_Board();
  184.         player = Pick_Player();
  185.  
  186.         put_str("Choose a square", 0x2000, 20-7, 3);
  187.         while ( !(buttons & SEGA_CTRL_A) )
  188.         {
  189.             delay(2);
  190.             buttons = get_pad(0);
  191.             if ( buttons & SEGA_CTRL_C )
  192.             {
  193.                 more = 0;
  194.                 break;
  195.             }
  196.         }
  197.         while ( get_pad(0) & SEGA_CTRL_A ) ;
  198.         put_str("               ", 0x2000, 20-7, 3);
  199.         delay(30);
  200.  
  201.         if ( !more )
  202.             break;
  203.  
  204.         switch ( buttons & 0x000F )
  205.         {
  206.             case SEGA_CTRL_UP:
  207.             row = 0;
  208.             column = 1;
  209.             break;
  210.             case SEGA_CTRL_DOWN:
  211.             row = 2;
  212.             column = 1;
  213.             break;
  214.             case SEGA_CTRL_LEFT:
  215.             row = 1;
  216.             column = 0;
  217.             break;
  218.             case SEGA_CTRL_UP+SEGA_CTRL_LEFT:
  219.             row = 0;
  220.             column = 0;
  221.             break;
  222.             case SEGA_CTRL_DOWN+SEGA_CTRL_LEFT:
  223.             row = 2;
  224.             column = 0;
  225.             break;
  226.             case SEGA_CTRL_RIGHT:
  227.             row = 1;
  228.             column = 2;
  229.             break;
  230.             case SEGA_CTRL_UP+SEGA_CTRL_RIGHT:
  231.             row = 0;
  232.             column = 2;
  233.             break;
  234.             case SEGA_CTRL_DOWN+SEGA_CTRL_RIGHT:
  235.             row = 2;
  236.             column = 2;
  237.             break;
  238.             default:
  239.             row = 1;
  240.             column = 1;
  241.             break;
  242.         }
  243.         buttons = 0;
  244.  
  245.         Choice_of_Row(row);
  246.         Choice_of_Column(column);
  247.  
  248.         test = Check_Move( Pick_Row(), Pick_Column());
  249.         if (test == 0)
  250.         {
  251.             // invalid move
  252.             continue;
  253.         }
  254.         Tic_Tac_Toe_Board();
  255.  
  256.         check = Check_Board();
  257.         if ( (check == 1) || (check == 2) )
  258.         {
  259.             put_chr((check == 1) ? 'X' : 'O', 0x0000, 20-4, 3);
  260.             put_str(" wins!", 0x0000, 20-3, 3);
  261.             delay(240);
  262.             put_str("        ", 0x0000, 20-4, 3);
  263.             // reset the board
  264.             Clear_Board();
  265.         }
  266.         else if ( check == 3 )
  267.         {
  268.             put_str("The game is tied", 0x0000, 20-8, 3);
  269.             delay(240);
  270.             put_str("                ", 0x0000, 20-8, 3);
  271.             // reset the board
  272.             Clear_Board();
  273.         }
  274.  
  275.         if ( player == 1)
  276.         {
  277.             player = 2;
  278.         }
  279.         else
  280.         {
  281.             player = 1;
  282.         }
  283.         Choice_by_Player(player);
  284.  
  285.     } // end of outer while loop
  286.  
  287.     clear_screen ();
  288.     return 0;
  289. } // end of main function
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement