// Include the libraries
#include <iostream>
#include <string>
//Use the standard namespace
usingnamespace std;
// Declare global variables
char Board[9];
// Declare functions
void showBoard ( );
bool moveIsValid (int m);
int whoWon ( ); //Returns 0 if no one has won, 1 if player 1 has won, and 2 if player 2 has won
void main ( )
{
// Declare local variables
string Player_1_Name;
string Player_2_Name;
int Whose_Turn = 1; // 1 means it's player 1's turn, 2 means it's player 2's turn
int Move; // Stores where the player wants to move
int Total_Moves = 0;
//Assign values to the playing board
Board[0] = '0';
Board[1] = '1';
Board[2] = '2';
Board[3] = '3';
Board[4] = '4';
Board[5] = '5';
Board[6] = '6';
Board[7] = '7';
Board[8] = '8';
// Get player names
cout << "Player 1: Please enter your name." << endl;
cin >> Player_1_Name;
cout << "Player 2: Please enter your name." << endl;
cin >> Player_2_Name;
while (whoWon ( ) == 0 && Total_Moves < 9)
{
// Do this until the player chooses a valid move
do
{
// Show the board
showBoard ( );
// Tell which player to move
if (Whose_Turn == 1)
{
cout << Player_1_Name << ": It's your turn." << endl;
}
else
{
cout << Player_2_Name << ": It's your turn." << endl;
}
// Get the move
cout << "Enter the number of the spot where you'd like to move." << endl;
cin >> Move;
} while (moveIsValid (Move) != true);
// Add 1 to Total_Moves
Total_Moves++;
// Change whose turn it is
switch (Whose_Turn)
{
case (1):
{
Board[Move] = 'x';
Whose_Turn = 2;
break;
}
case (2):
{
Board[Move] = 'o';
Whose_Turn = 1;
}
}
}
// Show the board
showBoard ( );
if (whoWon ( ) == 1)
{
cout << Player_1_Name << " has won the game!" << endl;
}
elseif (whoWon ( ) == 2)
{
cout << Player_2_Name << " has won the game!" << endl;
}
else
{
cout << "It's a tie game!" << endl;
}
system ("PAUSE");
}
void showBoard ( )
{
cout << endl;
cout << Board[0] << " | " << Board[1] << " | " << Board[2] << endl;
cout << "--+---+--" << endl;
cout << Board[3] << " | " << Board[4] << " | " << Board[5] << endl;
cout << "--+---+--" << endl;
cout << Board[6] << " | " << Board[7] << " | " << Board[8] << endl;
cout << endl;
}
bool moveIsValid (int m)
{
if (Board[m] != 'x' && Board[m] != 'o')
{
returntrue;
}
else
{
returnfalse;
}
}
int whoWon ( )
{
if (Board[0] == Board[1] && Board[1] == Board[2])
{
if (Board[0] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[3] == Board[4] && Board[4] == Board[5])
{
if (Board[3] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[6] == Board[7] && Board[7] == Board[8])
{
if (Board[6] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[0] == Board[3] && Board[3] == Board[6])
{
if (Board[0] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[1] == Board[4] && Board[4] == Board[7])
{
if (Board[1] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[2] == Board[5] && Board[5] == Board[8])
{
if (Board[2] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[0] == Board[4] && Board[4] == Board[8])
{
if (Board[0] == 'x')
{
return 1;
}
else
{
return 2;
}
}
if (Board[2] == Board[4] && Board[4] == Board[6])
{
if (Board[2] == 'x')
{
return 1;
}
else
{
return 2;
}
}
return 0;
}
I need to make it so that instead of a player two, the computer plays for player two, and puts in a random number to act as a second player. I don't want to change my original code to drastically, but i understand that i will need to in order for me to get the computer to play instead of a second person.
Looks like you really don't have to change much at all! Well done, it's always nice to have easily expandable programs.
In your case I'd look at the following lines:
1 2 3 4 5
cout << "Player 2: Please enter your name." << endl;
cin >> Player_2_Name;
//check if "computer" was typed in either of these, or both of these (see movie, war games)
//Here, check on computer's and humans, if the current turn is a computer add a function to move here, else
//do what you're already doing.
if (Whose_Turn == 1)
{
cout << Player_1_Name << ": It's your turn." << endl;
}
else
{
cout << Player_2_Name << ": It's your turn." << endl;
}
// Get the move
cout << "Enter the number of the spot where you'd like to move." << endl;
cin >> Move;
thanks! so you're saying make it so that if the person types "computer" as a person, the computer will play as the second player? ok... what's the best way to go about doing that??
I was actually thinking you could type "computer" on either player, and that person will turn into one, so you can even have computer vs computer.
Well make two bool variables (the best thing to do would probably be to make a custom "player" class with a computer flag) and if it's a computer set the bool = to true;
In the player's move section, check for which player is currently moving, and if it's a computer make a move, if it's not, get input and make a move that way.