ok, so im doing a c++ programing class at my online school, right now, it needs me to make a second version of the tic tac toe program i just made, and have player 2 be the second player, and im having a bit of trouble sending the random number as player 2's move, atm, i have something that i would think works, however, when building, it outputs, a trillion error's (not really, its just a lot of error's most of them being the same thing
//Tic Tac Toe, by Evan McLemore
//include the libraries
#include <iostream>
#include <string>
#include <ctime>
//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()
{
//seed the random number
srand (time (NULL) );
//declare local variables
string Player_1_Name;
string Player_2_Name;
int Whose_Turn = 1; //if 1, its player's 1 turn, if 2, its player's 2 turn
int Move; //stores the player's move
int Total_Moves = 0;
int Computer_Move = rand ( ) % 8;
int Guess;
//asign 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 the player's 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 has a valid move
do
{
//show the board
showBoard();
//tell the player to move
if(Whose_Turn == 1)
{
cout << "Player 1: its your turn to move" << endl;
//get the player's move
cout << "Enter the number of the slot you'd like to move to" << endl;
cin >> Move;
}
else
{
//cout << "Player 2: its your turn to move" << endl;
//get the player's move
//cout << "Enter the number of the slot you'd like to move to" << endl;
cout << "The Computer is Making His Move (Please type in what you think the computer chose)" << endl;
if (Guess == Computer_Move)
{
cout << "Please Type the number you chose for the above question again" << endl;
cin << Move;
}
}
}while(moveIsValid (Move) != true);
//add 1 to Total_Moves
Total_Moves++;
//change who's 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 again
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 << 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;
}
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;
}
would be awesome if you guys could help
here's some of the error's i get:
1 2 3 4 5
ompiling...
Tic_Tac_Toe.cpp
c:\c++ rescources\computer_tic_tac_toe\tic_tac_toe.cpp(24) : warning C4244: 'argument' : conversion from 'time_t' to 'unsigned int', possible loss of data
c:\c++ rescources\computer_tic_tac_toe\tic_tac_toe.cpp(77) : error C2784: 'std::basic_ostream<_Elem,_Traits> &std::operator <<(std::basic_ostream<_Elem,_Traits> &,const std::basic_string<_Elem,_Traits,_Alloc> &)' : could not deduce template argument for'std::basic_ostream<_Elem,_Traits> &' from 'std::istream'
c:\program files (x86)\microsoft visual studio 9.0\vc\include\string(537) : see declaration of 'std::operator <<'
You seem to have confused the insertion operator (<<) with the extraction operator (>>). (The former inserts data into a stream and the latter extracts data from a stream and stores it elsewhere.) There is no overload of the insertion operator for operands of types std::basic_istream<char> and int.
ok, ive ran into a new problem, the computer doesnt change its number, so for example, lets say on turn 1, the computer chose slot 1, on turn 2, its still set for slot 1, so the game gets stuck at that point, as its an invalid move
ok, ive ran into a new problem, the computer doesnt change its number, so for example, lets say on turn 1, the computer chose slot 1, on turn 2, its still set for slot 1, so the game gets stuck at that point, as its an invalid move
That is because the variable that is initialized to the pseudo-random number is never changed during the lifetime of the program.
Here are two solutions:
1) Have a container object that contains the numbers of the spaces that have not yet been used. When it is the computer's turn, randomly choose a number from the container and then erase the chosen element.
2) If it is the computer's turn, perform a modulus operation on the value returned by rand and the number of spaces on the board (8); assign the resulting value to the variable Move. Then check the validity of the Move variable using the function you defined. If the move is valid, continue. Otherwise, generate a new value.