Question: C++ VISUAL STUDIO Need help with code! Issue: validation at end of program AND error if player choose to play again. -If user press enter
C++ VISUAL STUDIO
Need help with code! Issue: validation at end of program AND error if player choose to play again.
-If user press enter key when the program asks to play again it should catch it and say it's invalid. Correct example below:

- If user choose to play again (press "y") this issue comes up. Screenshot comparing correct to written program:

RESTRICTIONS:
No break statements, goto statements, labels, global variables, or infinite loops
Here's code:
#include
#include
#include
using namespace std;
//Protocols
void credits();
void game();
void displayGrid(char[]);
void playerMakeMove(char[]);
int validatePlayerMove();
void computerMakeMove(char[]);
bool makeBestMove(char[], char, bool&);
string checkWin(char[], char playerCode, string playerName);
void credits()
{
string choice;
//Display splash screen
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
cout
system("pause");
}
void game()
{
//void game() will hold steps to play game
char continueToPlay = 'y';
int turns = 0; //turns declare player's turn is 0 or computer's turn is 1
string winner = ""; //player will go first
while (continueToPlay == 'y' || continueToPlay == 'Y')
{
char table[9] = { '0', '1', '2', '3', '4', '5', '6', '7', '8' };
turns = 0; //if play again, reset the turns
winner = ""; //if play again, reset winner
while (winner == "")
{
displayGrid(table);
//to take turns. player is 0 and comp is 1
if (turns == 0)
{
playerMakeMove(table); //call playerMakeMove
winner = checkWin(table, 'H', "Human"); //send table, playerCode, and playerName to check win
turns = 1; //if no winner, comp turn
}
else
{
computerMakeMove(table); //call computerMakeMove
winner = checkWin(table, 'C', "Computer"); //send table, playerCode, and playeName to check win
turns = 0; //if no winner, player turn
}
}
// If there is a tie
if (winner == "tie")
{
displayGrid(table);
cout
}
// If there is a winner
else
{
displayGrid(table);
cout
}
cout
cout
cin >> continueToPlay;
}
}
void displayGrid(char table[])
{
system("cls");
cout
cout
cout
cout
cout
cout
cout
cout
}
void playerMakeMove(char table[])
{
int move;
cout
cout
//validate if move is a number between 0 and 8 using validatePlayerMove
move = validatePlayerMove();
//if space is not available
while (!isdigit(table[move]))
{
cout
cout
move = validatePlayerMove();
}
//change space to 'H'
table[move] = 'H';
}
int validatePlayerMove()
{
string str1;
int counter = 0;
int wholeNumber;
long strLength;
getline(cin, str1); //get user input
strLength = str1.length();
while (counter
{
//if char is not a digit
if (!isdigit(str1[counter]) || strLength > 1)
{
cout
cout
getline(cin, str1);
strLength = str1.length();
counter = 0;
}
else if (str1[counter] > '8')
{
//if char greater than 8
cout
cout
getline(cin, str1);
strLength = str1.length();
counter = 0;
}
else
{
//if chars digits - continue
counter++;
}
}
wholeNumber = stoi(str1); //convert to integer using "stoi"
return wholeNumber; //send validated input back to game
}
void computerMakeMove(char table[])
{
cout
bool isTurnOver = false;
//if isTurnOver false, computer's turn
//if isTurnOver true, player's turn
makeBestMove(table, 'C', isTurnOver); //check attack
makeBestMove(table, 'H', isTurnOver); //check block
if (isTurnOver == false)
{
if (isdigit(table[4]))
{
table[4] = 'C';
}
else if (isdigit(table[0]))
{
table[0] = 'C';
}
else if (isdigit(table[2]))
{
table[2] = 'C';
}
else if (isdigit(table[6]))
{
table[6] = 'C';
}
else if (isdigit(table[8]))
{
table[8] = 'C';
}
else if (isdigit(table[1]))
{
table[1] = 'C';
}
else if (isdigit(table[3]))
{
table[3] = 'C';
}
else if (isdigit(table[5]))
{
table[5] = 'C';
}
else if (isdigit(table[7]))
{
table[7] = 'C';
}
}
}
bool makeBestMove(char table[], char playerCode, bool& isTurnOver)
{
//will run twice to check for winning combinations and if no wins, check for blocking
if (isTurnOver == false) //if computer's turn to move will find best move to block player from winning
{
//across - top row
if ((table[0] == playerCode) && (table[1] == playerCode) && (isdigit(table[2])))
{
table[2] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if ((table[0] == playerCode) && (table[2] == playerCode) && (isdigit(table[1])))
{
table[1] = 'C';
isTurnOver = true;
}
else if (table[1] == playerCode && (table[2] == playerCode) && (isdigit(table[0])))
{
table[0] = 'C';
isTurnOver = true;
}
//across - middle row
else if ((table[3] == playerCode) && (table[4] == playerCode) && (isdigit(table[5])))
{
table[5] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if (table[3] == playerCode && (table[5] == playerCode) && (isdigit(table[4])))
{
table[4] = 'C';
isTurnOver = true;
}
else if ((table[4] == playerCode) && (table[5] == playerCode) && (isdigit(table[3])))
{
table[3] = 'C';
isTurnOver = true;
}
//across - bottom row
else if (table[6] == playerCode && (table[7] == playerCode) && (isdigit(table[8])))
{
table[8] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if ((table[6] == playerCode) && (table[8] == playerCode) && (isdigit(table[7])))
{
table[7] = 'C';
isTurnOver = true;
}
else if (table[7] == playerCode && (table[8] == playerCode) && (isdigit(table[6])))
{
table[6] = 'C';
isTurnOver = true;
}
//down - left column
else if ((table[0] == playerCode) && (table[3] == playerCode) && (isdigit(table[6])))
{
table[6] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if (table[0] == playerCode && (table[6] == playerCode) && (isdigit(table[3])))
{
table[3] = 'C';
isTurnOver = true;
}
else if ((table[3] == playerCode) && (table[6] == playerCode) && (isdigit(table[0])))
{
table[0] = 'C';
isTurnOver = true;
}
//down - middle column
else if (table[1] == playerCode && (table[4] == playerCode) && (isdigit(table[7])))
{
table[7] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if ((table[1] == playerCode) && (table[7] == playerCode) && (isdigit(table[4])))
{
table[4] = 'C';
isTurnOver = true;
}
else if (table[4] == playerCode && (table[7] == playerCode) && (isdigit(table[1])))
{
table[1] = 'C';
isTurnOver = true;
}
//down - right column
else if ((table[2] == playerCode) && (table[5] == playerCode) && (isdigit(table[8])))
{
table[8] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if (table[2] == playerCode && (table[8] == playerCode) && (isdigit(table[5])))
{
table[5] = 'C';
isTurnOver = true;
}
else if ((table[5] == playerCode) && (table[8] == playerCode) && (isdigit(table[2])))
{
table[2] = 'C';
isTurnOver = true;
}
//diagonal - top left to bottom right
else if (table[0] == playerCode && (table[4] == playerCode) && (isdigit(table[8])))
{
table[8] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if ((table[0] == playerCode) && (table[8] == playerCode) && (isdigit(table[4])))
{
table[4] = 'C';
isTurnOver = true;
}
else if (table[4] == playerCode && (table[8] == playerCode) && (isdigit(table[0])))
{
table[0] = 'C';
isTurnOver = true;
}
//diagonal - top right to bottom left
else if ((table[2] == playerCode) && (table[4] == playerCode) && (isdigit(table[6])))
{
table[6] = 'C'; //computer will mark area theirs
isTurnOver = true; //declare player's turn
}
else if (table[2] == playerCode && (table[6] == playerCode) && (isdigit(table[4])))
{
table[4] = 'C';
isTurnOver = true;
}
else if ((table[4] == playerCode) && (table[6] == playerCode) && (isdigit(table[2])))
{
table[2] = 'C';
isTurnOver = true;
}
} return isTurnOver;
}
string checkWin(char table[], char playerCode, string playerName)
{
//checkWin is called for either player
//playerCode is argument and playerName is return
string winner = "";
//across - bottom row
if (table[6] == playerCode && table[7] == playerCode && table[8] == playerCode)//across the bottom
{
winner = playerName;
}
//across - middle row
else if (table[3] == playerCode && table[4] == playerCode && table[5] == playerCode)//across the middle
{
winner = playerName;
}
//across - top row
else if (table[0] == playerCode && table[1] == playerCode && table[2] == playerCode)//across the top
{
winner = playerName;
}
//down - left column
else if (table[0] == playerCode && table[3] == playerCode && table[6] == playerCode)//down the left
{
winner = playerName;
}
//down - middle column
else if (table[1] == playerCode && table[4] == playerCode && table[7] == playerCode)//down the middle
{
winner = playerName;
}
//down - right column
else if (table[2] == playerCode && table[5] == playerCode && table[8] == playerCode)//down the right
{
winner = playerName;
}
//diagonal - top left to bottom right
else if (table[0] == playerCode && table[4] == playerCode && table[8] == playerCode)//diag top left right
{
winner = playerName;
}
//diagonal - top right to bottom left
else if (table[2] == playerCode && table[4] == playerCode && table[6] == playerCode)//diag top right left
{
winner = playerName;
}
//tie
else if (!isdigit(table[0]) && !isdigit(table[1]) && !isdigit(table[2]) &&
!isdigit(table[3]) && !isdigit(table[4]) && !isdigit(table[5]) &&
!isdigit(table[6]) && !isdigit(table[7]) && !isdigit(table[8]))
{
winner = "tie";
}
else
{
winner = "";
}
return winner;
}
int main()
{
credits();
game();
return 0;
}
TIC-TAC-TOE 011|Cl 3CH invalid entry game over!, play again? y invalid entry game over!, play again? y invalid entry game over!, play again? y invalid entry game over!, play again? y
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
