So I am trying to program a way to replay a tic tac toe game after someone wins, loses, or ties. So basically my attempt to get replay to work, doesnt work. If player 1 won and I type 1 to replay, it would ask player 2 for their input A basic outline of my code looks like this:
do
{
set entire 2d array to '*'
do
{
player 1 input
does game tie?
does player 1 win
player 2 input
does game tie?
does player 2 win
}while no one wins
}while replay = 1
heres my code
//tie check, replay, use pointer notation
#include <iostream>
using namespace std;
void initialize(char [][3]);
void player1(char [][3]);
void player2(char [][3]);
void display(char [][3]);
char check(char [3][3]);
int checkWin(int);
int tie(int);
int askReplay();
int main()
{
char board[3][3];
char end = '*';
int row1, column1, row2,column2;
int replay = 0;
int turns = 0;
//replay loop
do
{
//set board to *
initialize(board);
display(board);
do
{
//player 1 turn
player1(board);
turns++;
display(board);
//if turns = 9 then tie
replay = tie(turns);
//check if player 1 won
end = check(board);
replay = checkWin(end);
//player 2 turn
player2(board);
turns++;
display(board);
//if turns = 9 then tie
replay = tie(turns);
//check if player 2 won
end = check(board);
replay = checkWin(end);
}while (end == '*');
}while (replay == 1);
return 0;
}
void initialize(char (*array)[3])
{
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < 3;j++)
*(*(array + i) + j) = '*';
}
cout << "New Game\n";
}
void player1(char (*array)[3])
{
int row1, column1;
cout << "Player 1\nRow: ";
cin >> row1;
while (row1 < 0 || row1 > 2)
{
cout << "Enter a number between 0 and 2 for Row:: ";
cin >> row1;
}
cout << "Column: ";
cin >> column1;
while (column1 < 0 || column1 > 2)
{
cout << "Enter a number between 0 and 2 for Column: ";
cin >> column1;
}
if (*(*(array + row1) + column1) == '*')
*(*(array + row1) + column1) = 'X';
else
{
cout << "Space Occupied\n";
player1(array);
}
}
void player2(char (*array)[3])
{
int row2,column2;
cout << "Player 2\nRow: ";
cin >> row2;
while (row2 < 0 || row2 > 2)
{
cout << "Enter a number between 0 and 2 for Row: ";
cin >> row2;
}
cout << "Column: ";
cin >> column2;
while (column2 < 0 || column2 > 2)
{
cout << "Enter a number between 0 and 2 for Column: ";
cin >> column2;
}
if (*(*(array + row2) + column2) == '*')
*(*(array + row2) + column2) = 'O';
else
{
cout << "Space Occupied\n";
player2(array);
}
}
void display(char (*array)[3])
{
for (int x = 0;x < 3;x++)
{
for (int y = 0;y < 3;y++)
cout << *(*(array + x) + y) << " ";
cout << endl;
}
}
char check(char (*array)[3])
{
int i;
/* check rows */
for(i = 0; i < 3; i++)
if(*(*(array + i) + 0) == *(*(array + i) + 1) && *(*(array + i) + 0) == *(*(array + i) + 2))
return *(*(array + i) + 0);
/* check columns */
for(i = 0; i < 3; i++)
if(*(*(array + 0) + i) == *(*(array + 1) + i) && *(*(array + 0) + i) == *(*(array + 2) + i))
return *(*(array + 0) + i);
/* test diagonals */
if(*(*(array + 0) + 0) == *(*(array + 1) + 1) && *(*(array + 1) + 1) == *(*(array + 2) + 2))
return *(*(array + 0) + 0);
if(*(*(array + 0) + 2) == *(*(array + 1) + 1) && *(*(array + 1) + 1) == *(*(array + 2) + 0))
return *(*(array + 0) + 2);
return '*';
}
int checkWin(int over)
{
if (over == '*')
return 0;
if (over == 'X')
cout << "Player 1 Won!\n";
else if (over == 'O')
cout << "Player 2 Won!\n";
//ask if they want to play again
int answer;
answer = askReplay();
switch (answer)
{
case 1:
return 1;
break;
case 2:
cout << "Thank you for playing.\n";
exit(0);
break;
}
}
int tie(int count)
{
if (count == 9)
{
int answer;
cout << "Tie game";
answer = askReplay();
switch (answer)
{
case 1:
return 1;
break;
case 2:
cout << "Thank you for playing.\n";
exit(0);
break;
}
}
}
int askReplay()
{
int input;
do
{
cout << "Play Again?\n1.Yes\n2.No\nEnter 1 or 2: ";
cin >> input;
if (input > 2 || input < 1)
cout << "Invalid Option\n";
}while(input > 2 || input < 1);
return input;
}