Hey guys
I am doing well making a tic tac toe program and so far I have created the board and am able to place the "O" character as a human move in any of the nine slots. Also, I have a function that checks if the move is legal before it allows this to happen.
The problem comes when I try to ask the computer to make a move. I keeps saying "cannot move to this location" even when the square is empty. All the game does so far is call the computer move then call the player move so I can test to see if its working ok before I go through all the winning moves etc.
Here is the code that organises the computer movement each turn
Code:
// function to determine a computer move
int TicTacToe::makeComputerMove ( char m_Board[][ 3 ] )
{
int square = 0;
int xCorr = rand() % 8 + 0;
if (( xCorr < 0 ) || ( xCorr > 8 ))
{
return 0;
}
int yCorr = rand() % 8 + 0;
if (( yCorr < 0 ) || ( yCorr > 8 ))
{
return 0;
}
if (( xCorr == 0 ) && ( yCorr == 0 )) { m_Board[ xCorr ][ yCorr ]; square = 1; }
else if (( xCorr == 0 ) && ( yCorr == 1 )) { m_Board[ xCorr ][ yCorr ]; square = 2; }
else if (( xCorr == 0 ) && ( yCorr == 2 )) { m_Board[ xCorr ][ yCorr ]; square = 3; }
else if (( xCorr == 1 ) && ( yCorr == 0 )) { m_Board[ xCorr ][ yCorr ]; square = 4; }
else if (( xCorr == 1 ) && ( yCorr == 1 )) { m_Board[ xCorr ][ yCorr ]; square = 5; }
else if (( xCorr == 1 ) && ( yCorr == 2 )) { m_Board[ xCorr ][ yCorr ]; square = 6; }
else if (( xCorr == 2 ) && ( yCorr == 0 )) { m_Board[ xCorr ][ yCorr ]; square = 7; }
else if (( xCorr == 2 ) && ( yCorr == 1 )) { m_Board[ xCorr ][ yCorr ]; square = 8; }
else if (( xCorr == 2 ) && ( yCorr == 2 )) { m_Board[ xCorr ][ yCorr ]; square = 9; }
isLegalComp ( m_Board, xCorr, yCorr, square );
return 0;
}
This function checks if the move is legal
Code:
// function to check that the move the computer
// makes is a legal one
int TicTacToe::isLegalComp ( char m_Board [][ 3 ], int &x, int &y, int &square )
{
// first row first column
if (( square == 1 ) && ( m_SquareTaken[ 0 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 0 ]++;
return 0;
}
// first row second column
if (( square == 2 ) && ( m_SquareTaken[ 1 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 1 ]++;
return 0;
}
// first row third column
if (( square == 3 ) && ( m_SquareTaken[ 2 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 2 ]++;
return 0;
}
// second row first column
if (( square == 4 ) && ( m_SquareTaken[ 3 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 3 ]++;
return 0;
}
// second row second column
if (( square == 5 ) && ( m_SquareTaken[ 4 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 4 ]++;
return 0;
}
// second row third column
if (( square == 6 ) && ( m_SquareTaken[ 5 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 5 ]++;
return 0;
}
// third row first column
if (( square == 7 ) && ( m_SquareTaken[ 6 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 6 ]++;
return 0;
}
// third row second column
if (( square == 8 ) && ( m_SquareTaken[ 7 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 7 ]++;
return 0;
}
// third row third column
if (( square == 9 ) && ( m_SquareTaken[ 8 ] == 0 ))
{
m_Board[ x ][ y ] = 'X';
m_SquareTaken[ 8 ]++;
return 0;
}
// move is illegal
else
{
std::cout << "\nCannot move to this location!\n";
return 1;
}
return 0;
}
The human move functions are almost identical to these and they are working perfectly, I do not understand why the computer move is not working.
Any help appreiciated - I know its alot to read but the program is quite large.