Access the matrix array for simple Tic Tac Toe game - C Array

C examples for Array:Multidimensional Arrays

Description

Access the matrix array for simple Tic Tac Toe game

Demo Code

#include <stdio.h>
#include <stdlib.h>

char matrix[3][3]; /* the tic tac toe matrix */

char check(void);
void init_matrix(void);
void get_player_move(void);
void get_computer_move(void);
void disp_matrix(void);

int main(void)
{
   char done;/*from w w  w . j ava 2  s.  co m*/

   printf("This is the game of Tic Tac Toe.\n");

   printf("You will be playing against the computer.\n");

   done = ' ';
   init_matrix();

   do {

      disp_matrix();
      get_player_move();
      done = check(); /* see if winner */
      if (done != ' ') break; /* winner!*/
      get_computer_move();

      done = check(); /* see if winner */
   } while (done == ' ');

   if (done == 'X') printf("You won!\n");
   else printf("I won!!!!\n");

   disp_matrix(); /* show final positions */

   return 0;
}

/* Initialize the matrix. */

void init_matrix(void)
{

   int i, j;

   for (i = 0; i<3; i++)

      for (j = 0; j<3; j++) matrix[i][j] = ' ';

}

/* Get a player's move. */
void get_player_move(void)
{

   int x, y;

   printf("Enter X,Y coordinates for your move: ");
   scanf("%d%*c%d", &x, &y);
   x--; y--;

   if (matrix[x][y] != ' ') {
      printf("Invalid move, try again.\n");
      get_player_move();
   }
   else matrix[x][y] = 'X';
}

/* Get a move from the computer. */
void get_computer_move(void)
{
   int i, j;
   for (i = 0; i<3; i++) {
      for (j = 0; j<3; j++)
         if (matrix[i][j] == ' ') break;
      if (matrix[i][j] == ' ') break;
   }

   if (i*j == 9) {
      printf("draw\n");
      exit(0);
   }
   else
      matrix[i][j] = 'O';
}

/* Display the matrix on the screen. */
void disp_matrix(void)
{
   int t;

   for (t = 0; t<3; t++) {
      printf(" %c | %c | %c ", matrix[t][0],
         matrix[t][1], matrix[t][2]);
      if (t != 2) printf("\n--- |--- |---\n");
   }
   printf("\n");
}

/* See if there is a winner. */
char check(void)
{
   int i;

   for (i = 0; i<3; i++) /* check rows */
      if (matrix[i][0] == matrix[i][1] &&
         matrix[i][0] == matrix[i][2]) return matrix[i][0];

   for (i = 0; i<3; i++) /* check columns */
      if (matrix[0][i] == matrix[1][i] &&
         matrix[0][i] == matrix[2][i]) return matrix[0][i];

   /* test diagonals */
   if (matrix[0][0] == matrix[1]
      [1] &&
      matrix[1][1] == matrix[2][2])
      return matrix[0][0];

   if (matrix[0][2] == matrix[1]
      [1] &&
      matrix[1][1] == matrix[2][0])
      return matrix[0][2];

   return ' ';
}

Result


Related Tutorials