Mega Code Archive

 
Categories / C / Data Type
 

A simple Tic Tac Toe game

/* C: The Complete Reference, 4th Ed. (Paperback) by Herbert Schildt ISBN: 0072121246 Publisher: McGraw-Hill Osborne Media; 4 edition (April 26, 2000) */ #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;   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 ' '; }