The way it is written, it starts another game even after I win 5 rounds and then ends. It isn't "wrong" per se, but I would do it a bit different.
Yes you're right. :| A friend helped me and now the game's up and running except for that error you have specified. After someone reaches 5 wins, it still asks the other player for a move, then ends the game.
May anyone help me with that?
Credits to Ken Russell for the revision of my Non diag functions as well as the fixing the part it went wrong when checking the winner.
Code:
#include <stdio.h>
#include <stdlib.h>
int checkDiag(int board[3][3])
{
if(board[1][1] == board[0][0] && board[1][1] == board[2][2])
return 1;
else if(board[1][1] == board[0][2] && board[1][1] == board[2][0])
return 1;
return 0;
}
int checkNondiag(int board[3][3])
{
int k;
for (k=0; k<3; k++)
{
if (board[k][1]==board[k][0] && board[k][1]==board[k][2])
return 1;
}
for (k=0; k<3; k++)
{
if (board[1][k]==board[0][k] && board[1][k]==board[2][k])
return 1;
}
}
void gameboard(int board[3][3], int p1, int p2)
{
int i, j;
printf("TIC TAC TOE IN C\n\n");
printf("\nPlayer 1(X): %d\nPlayer 2(O): %d\n\n", p1, p2);
printf(" - - - \n|1|2|3|\n - - - \n|4|5|6|\n - - - \n|7|8|9|\n - - - \n\n");
printf(" - - - \n");
for(i=0;i<3;i++)
{
printf("|");
for(j=0;j<3;j++)
{
switch(board[i][j])
{
case 1: printf("X|");
break;
case 2: printf("O|");
break;
default: printf(" |");
}
}
printf("\n - - - \n");
}
}
int main(void)
{
int board[3][3] = {10, 20, 30, 40, 50, 60, 70, 80, 90};
int turn = 0, move = 0, win = 0, p1 = 0, p2 = 0;
int i, j;
do
{
do
{
system("cls");
gameboard(board, p1, p2);
move = 0;
if(checkDiag(board) == 1 || checkNondiag(board) == 1)
switch(turn)
{
case 0: p2++;
break;
case 1: p1++;
break;
}
if(checkDiag(board) == 1 || checkNondiag(board) == 1)
{ system("cls");
win = 1;
gameboard(board,p1,p2);
switch(turn)
{
case 0: printf("Player 2 won this round!\n", p1, p2);
system("Pause");
break;
case 1: printf("Player 1 won this round!\n", p1, p2);
system("Pause");
break;
}
system("cls");
for(i=0;i<3;i++)
for(j=0;j<3;j++)
board[i][j] = (i*10)+(j*20);
gameboard(board,p1,p2);
}
printf("Player %d's turn!\n", turn + 1);
printf("What space would you like to use? ");
while(move < 1 || move > 9)
{
scanf("%d", &move);
if( move < 1 || move > 9)
printf("Invalid coordinates. Please enter another: ");
}
switch(move)
{
case 1: board[0][0] = turn + 1;
break;
case 2: board[0][1] = turn + 1;
break;
case 3: board[0][2] = turn + 1;
break;
case 4: board[1][0] = turn + 1;
break;
case 5: board[1][1] = turn + 1;
break;
case 6: board[1][2] = turn + 1;
break;
case 7: board[2][0] = turn + 1;
break;
case 8: board[2][1] = turn + 1;
break;
case 9: board[2][2] = turn + 1;
break;
}
switch(turn)
{
case 0: turn = 1;
break;
case 1: turn = 0;
break;
}
}while(win == 0);
win = 0;
}while(p1 < 5 && p2 < 5);
if(p1==5)
printf("\nPlayer 1 has won the game!\nThank you for playing!\n");
else
printf("\nPlayer 2 has won the game!\nThank you for playing!\n");
}