random numbers and making it that it's me against the computer
Code:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int valid = 1, endGame = 0, currentPlayer = 1 ;
#define playerTwoIsComputer 1
#define playerOne 'X'
#define playerTwo 'O'
char selection, grid[10] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
void draw_title() {
system( "cls || clear" ) ;
printf( "\n\tTic Tac Toe Game\n\n");
if (playerTwoIsComputer) {
printf(" Player 1 (%c) - Computer (%c) ", playerOne, playerTwo);
} else {
printf(" Player 1 (%c) - Player 2 (%c) ", playerOne, playerTwo);
}
printf( "\n\n\n");
}
void draw_board() {
draw_title();
printf("\t | | \n");
printf("\t %c | %c | %c \n", grid[1], grid[2], grid[3]);
printf("\t_____|_____|_____\n");
printf("\t | | \n");
printf("\t %c | %c | %c \n", grid[4], grid[5], grid[6]);
printf("\t_____|_____|_____\n");
printf("\t | | \n");
printf("\t %c | %c | %c \n", grid[7], grid[8], grid[9]);
printf("\t | | \n\n\n");
}
int drawPiece(char character,int index) {
int onBlock = ( index + 48 );
if ( grid[index] == onBlock ) {
grid[index] = character;
return 1;
} else {
return 0;
}
}
void ask_menu() {
printf(" Player %i, enter a number: ", currentPlayer);
scanf("%i", &selection);
}
void computerPlayerTwo() {
int hasValid = 0;
for (int i=1; i<9; i++) {
if ((grid[i] != playerOne) && (grid[i] != playerTwo)) {
hasValid = 1;
}
}
if (hasValid) {
do {
selection = ((rand() % 8)+1);
valid = drawPiece( playerTwo, selection );
} while (!valid);
} else {
draw_board();
printf("Game Over. Tie.");
exit(0);
}
}
int check_results() {
int cPoint = 0, cLog = 0;
cPoint = 1; if (grid[cPoint] == grid[cPoint+1] && grid[cPoint+1] == grid[cPoint+2]) return 1;
cPoint = 4; if (grid[cPoint] == grid[cPoint+1] && grid[cPoint+1] == grid[cPoint+2]) return 1;
cPoint = 7; if (grid[cPoint] == grid[cPoint+1] && grid[cPoint+1] == grid[cPoint+2]) return 1;
cPoint = 1; if (grid[cPoint] == grid[cPoint+3] && grid[cPoint+3] == grid[cPoint+6]) return 1;
cPoint = 2; if (grid[cPoint] == grid[cPoint+3] && grid[cPoint+3] == grid[cPoint+6]) return 1;
cPoint = 3; if (grid[cPoint] == grid[cPoint+3] && grid[cPoint+3] == grid[cPoint+6]) return 1;
cPoint = 1; if (grid[cPoint] == grid[cPoint+4] && grid[cPoint+4] == grid[cPoint+8]) return 1;
cPoint = 3; if (grid[cPoint] == grid[cPoint+2] && grid[cPoint+2] == grid[cPoint+4]) return 1;
cPoint = 0; return cPoint;
};
int main( int args, char * argv[] ) { srand(time(0));
draw_board(); void game_over();
while (!endGame) {
if (currentPlayer == 1) {
ask_menu();
valid = drawPiece( playerOne, selection );
} else {
if (playerTwoIsComputer) {
computerPlayerTwo();
} else {
ask_menu();
valid = drawPiece( playerTwo, selection );
}
}
if (valid) {
if (check_results()) { draw_board(); game_over(); };
currentPlayer++;
if (currentPlayer > 2) currentPlayer = 1;
draw_board();
} else {
draw_board();
printf(" Invalid selection: %i\nTry again ", selection );
}
};
return 0;
}
void game_over() {
if (playerTwoIsComputer && currentPlayer == 2) {
printf("\nGame Over. Computer won. \n" );
} else {
printf("\nGame Over. Player %i won. \n", currentPlayer);
}
exit(0);
}