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:

C++ VISUAL STUDIO Need help with code! Issue: validation at end of

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

program AND error if player choose to play again. -If user press

RESTRICTIONS:

No break statements, goto statements, labels, global variables, or infinite loops

Here's code:

#include

#include //for string

#include //for stoi

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

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!