I am having some issues with a TIC TAC TOE program I'm working on for a challenge. It works fine except if I try to play as 'O' it goes on with me playing as 'X' anyway, and when a game should theoretically end in a draw it just keeps asking me to enter a valid place to put 'X' and I can't, because all the spaces are taken.
I'm thinking the first problem has something to do with the 'if' statement in my main function. I don't understand why the game never ends in a draw. I tried to make it so that if the main game loop ran more than 9 times (the maximum number of moves) it would default to a draw, but something is wrong.
Any help would be immensely appreciated. These problems with it are really bothering me.
Code:#include <stdio.h> #include <stdlib.h> #include <time.h> void srand (); void printBoard(char ary[3][3]); void cAction(char ary[3][3], int p); void pAction(char ary[3][3], int p); int chkGame(char ary[3][3], int p); int main(void) { char board[3][3] = { {'1','2','3'}, {'4','5','6'}, {'7','8','9'} }; int turn = 0; int player = 0; int winner = 0; int i = 0; printf("\nName: Ryan Slater\n"); printf("\nLet's play TIC-TAC-TOE!\n"); do { printf("\nDo you want to be X or O (X moves first)?\n"); printf("Enter 1 for X and 2 for O: "); scanf("%d", &player); } while (player != 1 && player != 2); for(i = 0; i < 9 && winner == 0; i++) { if (player = 1) { printBoard(board); pAction(board, player); winner = chkGame(board, player); cAction(board, player); winner = chkGame(board, player); } else { cAction(board, player); winner = chkGame(board, player); printBoard(board); pAction(board, player); winner = chkGame(board, player); } } printf("\nIt's a cat's game!\n"); printf("\nThe game has ended in a draw.\n"); return 0; } void printBoard(char ary[3][3]) { printf("\n"); printf(" %c | %c | %c\n", ary[0][0], ary[0][1], ary[0][2]); printf(" ---|---|---\n"); printf(" %c | %c | %c\n", ary[1][0], ary[1][1], ary[1][2]); printf(" ---|---|---\n"); printf(" %c | %c | %c\n\n", ary[2][0], ary[2][1], ary[2][2]); } void pAction(char ary[3][3], int p) { int spot; int row; int col; do { printf("Enter the number of an available space, you are %c: ", (p == 1) ? 'X' : 'O'); scanf("%d", &spot); row = --spot / 3; col = spot % 3; } while (spot < 0 || spot > 9 || ary[row][col] > '9'); ary[row][col] = (p == 1) ? 'X' : 'O'; } void cAction (char ary[3][3], int p) { int x; int spot; int row; int col; srand(time(NULL)); do { x = rand(); x = (x % 9) + 1; row = --x / 3; col = x % 3; } while (x < 0 || x > 9 || ary[row][col] > '9'); printf("The computer picked space %c\n", ary[row][col]); ary[row][col] = (p == 1) ? 'O' : 'X'; } int chkGame (char ary[3][3], int p) { if (p = 1) { if ((ary[0][0] == ary[1][1] && ary[0][0] == ary[2][2] && ary[0][0] == 'X') || (ary[0][2] == ary[1][1] && ary[0][2] == ary[2][0] && ary[0][2] == 'X') || (ary[0][0] == ary[0][1] && ary[0][0] == ary[0][2] && ary[0][0] == 'X') || (ary[1][0] == ary[1][1] && ary[1][0] == ary[1][2] && ary[1][0] == 'X') || (ary[2][0] == ary[2][1] && ary[2][0] == ary[2][2] && ary[2][0] == 'X') || (ary[0][0] == ary[1][0] && ary[0][0] == ary[2][0] && ary[0][0] == 'X') || (ary[0][1] == ary[1][1] && ary[0][1] == ary[2][1] && ary[0][1] == 'X') || (ary[0][2] == ary[1][2] && ary[0][2] == ary[2][2] && ary[0][2] == 'X')) { printf("\nYou Win!\n"); printf("A WinRAR is YOU!!!\n"); printBoard(ary); exit(0); } else if((ary[0][0] == ary[1][1] && ary[0][0] == ary[2][2]) || (ary[0][2] == ary[1][1] && ary[0][2] == ary[2][0]) || (ary[0][0] == ary[0][1] && ary[0][0] == ary[0][2]) || (ary[1][0] == ary[1][1] && ary[1][0] == ary[1][2]) || (ary[2][0] == ary[2][1] && ary[2][0] == ary[2][2]) || (ary[0][0] == ary[1][0] && ary[0][0] == ary[2][0]) || (ary[0][1] == ary[1][1] && ary[0][1] == ary[2][1]) || (ary[0][2] == ary[1][2] && ary[0][2] == ary[2][2])) { printf("\nYou Lose!\n"); printf("You are a FAILURE!!!\n"); printBoard(ary); exit(0); } } else if (p = 2) { if ((ary[0][0] == ary[1][1] && ary[0][0] == ary[2][2] && ary[0][0] == 'O') || (ary[0][2] == ary[1][1] && ary[0][2] == ary[2][0] && ary[0][2] == 'O') || (ary[0][0] == ary[0][1] && ary[0][0] == ary[0][2] && ary[0][0] == 'O') || (ary[1][0] == ary[1][1] && ary[1][0] == ary[1][2] && ary[1][0] == 'O') || (ary[2][0] == ary[2][1] && ary[2][0] == ary[2][2] && ary[2][0] == 'O') || (ary[0][0] == ary[1][0] && ary[0][0] == ary[2][0] && ary[0][0] == 'O') || (ary[0][1] == ary[1][1] && ary[0][1] == ary[2][1] && ary[0][1] == 'O') || (ary[0][2] == ary[1][2] && ary[0][2] == ary[2][2] && ary[0][2] == 'O')) { printf("\nYou Win!\n"); printf("A WinRAR is YOU!!!\n"); printBoard(ary); exit(0); } else if((ary[0][0] == ary[1][1] && ary[0][0] == ary[2][2]) || (ary[0][2] == ary[1][1] && ary[0][2] == ary[2][0]) || (ary[0][0] == ary[0][1] && ary[0][0] == ary[0][2]) || (ary[1][0] == ary[1][1] && ary[1][0] == ary[1][2]) || (ary[2][0] == ary[2][1] && ary[2][0] == ary[2][2]) || (ary[0][0] == ary[1][0] && ary[0][0] == ary[2][0]) || (ary[0][1] == ary[1][1] && ary[0][1] == ary[2][1]) || (ary[0][2] == ary[1][2] && ary[0][2] == ary[2][2])) { printf("\nYou Lose!\n"); printf("You are a FAILURE!!!\n"); printBoard(ary); exit(0); } } return 0; }



LinkBack URL
About LinkBacks




