Tic tac toe game

Hello there. I am working on Tic tac toe game programming. I just started learning C++. The game that I coded consists of 3 different file. First one main.cpp file invokes functions, Tictactoe.cpp file has all the functions of the game, and Tictactoe.h header file has all the function prototypes, public and private variables and enumarations. Here is my main.cpp file


#include "Tictactoe.h"
#include<iostream>
using namespace std;


int main()
{

Tictactoe A;
A.initiliazeGame();


return 0;
}

When I compile the program, it gives error on Tictactoe A; line with saying:
TicTacToe was not declared in this scope.
Expected ';' before 'A'.

I tried to debug it but I was successful to make it run.

I will post my rest of codes here just in case and I would love to hear your advises about Artificial Intelligence that I could possibly implement into this game.

Here is my Tictactoe.cpp file that has functions

#include "Tictactoe.h"
#include <iostream>
#include <cmath>
#include <iomanip>
#include <windows.h>

using namespace std;





void initializeGame(){
{

Status gameState = CONTINUE;
cout << "\n This is a Tic Tac Toe program. Choose the type of game: "
<< "\n (1) human o vs. human x (2) human o vs. dumb computer x"
<< "\n\n -> ";
cin >> gametype;


/* Show the current state of Tic Tac Toe board. */
cout << gameState;

/*
Main game loop
*/
while ( gameState == CONTINUE )
{
/* Increment turnNum by 1. */
turnNum++;
/* If turnNum equal to 10
Set gameState to DRAW.
Break out of while loop. */
if ( turnNum == 10 )
{
gameState = DRAW;
break;
}
/* If we are on an odd-numbered turn
Print "It's o's turn."
Set currentSymbol to 'o'.
Call getHumanSquare function to get squareChoice.*/
if ( turnNum%2 != 0)
{
cout << "It's o's turn.";
currentSymbol = 'o';
//int result;
int result = getHumanSquare (board);
}
/* Else (we are on an even-numbered turn)
Print "It's x's turn."
Set currentSymbol to 'x'. */
else
{
cout << "It's x's turn.";
currentSymbol = 'x';
}


/* If the gametype is 1 (human vs. human)
Call getHumanSquare function to get squareChoice.*/
if ( gametype == 1 )
{
return getHumanSquare( board );
}

/* Else (gametype is 2 (human vs. computer))
Call getComputerSquare function to get squareChoice. */
else
{


return getComputerSquare(board);
}
}

/* If squareChoice is -1 (human player quit)
Set gameState to QUIT.*/
if ( squareChoice == -1 )
{
gameState = QUIT;
}

/* Else
Insert currentSymbol into board at (squareChoice - 1).
Show the current state of the Tic Tac Toe board.
Call checkGameState function to determine the gameState. */
else
{
gameState=CONTINUE;
}
}

// end while


/* If gameState is WIN
print "Player " currentSymbol " is the winner." */
if ( gameState == WIN)
cout << "Player " currentSymbol " is the winner.";

/* If gameState is DRAW
print "It's a draw." */
if ( gameState == DRAW )
cout << "It's a draw.";

return 0;
}

}
void showBoard( const char board [], int size )
{
cout << endl;

for ( int i = 0; i < size ; i++ )
{
cout << board[ i ] << " ";
if ( ( i + 1 ) % 3 == 0 )
cout << endl;
}

cout << endl;
}

/////////////////////////////////////////////////////////////////////

Status checkGameState( const char board[] )
{
// Board Array
//
// 1 2 3 0 1 2
// 4 5 6 --> 3 4 5
// 7 8 9 6 7 8
//
// Diagonal winners
if ( board[ 0 ] == board[ 4 ] && board[ 0 ] == board[ 8 ] )
return WIN;
else if ( board[ 2 ] == board[ 4 ] && board[ 4 ] == board[ 6 ] )
return WIN;
// Horizontal winners
else if ( board[ 0 ] == board[ 1 ] && board[ 1 ] == board[ 2 ] )
return WIN;
else if ( board[ 3 ] == board[ 4 ] && board[ 4 ] == board[ 5 ] )
return WIN;
else if ( board[ 6 ] == board[ 7 ] && board[ 7 ] == board[ 8 ] )
return WIN;
// Vertical winners
else if ( board[ 0 ] == board[ 3 ] && board[ 3 ] == board[ 6 ] )
return WIN;
else if ( board[ 1 ] == board[ 4 ] && board[ 4 ] == board[ 7 ] )
return WIN;
else if ( board[ 2 ] == board[ 5 ] && board[ 5 ] == board[ 8 ] )
return WIN;
else
// No one has won yet
return CONTINUE;
}

/////////////////////////////////////////////////////////////////////

int getHumanSquare( const char board[] )
{
int squareNum;

cout << "\n Input the number of an empty square: (-1 to quit) ";
cin >> squareNum;

while ( checkBadSquare( board, squareNum ) == true )
{
cout << "\n Bad input. Choose another square: ";
cin >> squareNum;
}

return squareNum;
}

/////////////////////////////////////////////////////////////////////

int getComputerSquare( const char board[] )
{
int squareNum;

squareNum = getrandint( 1, 9 );

while ( checkBadSquare( board, squareNum ) == true )
{
squareNum = getrandint( 1, 9 );
}

return squareNum;
}

/////////////////////////////////////////////////////////////////////

bool checkBadSquare( const char board[], int squareNum )
{
int realSquareNum = squareNum - 1; // count from 0

if ( squareNum == -1 )
return false; // Let quit code pass as a valid square
else if ( squareNum > 9 )
return true; // Square numbers out of range are invalid
else if ( board[ realSquareNum ] == 'o' || board[ realSquareNum ] == 'x' )
return true; // Already taken squares are invalid
else
return false; // Valid square number
}

/////////////////////////////////////////////////////////////////////

int getrandint( int min, int max )
{
int scale, shift;
scale = max - min + 1;
shift = min;
return randint() % scale + shift;
}


And here is my Tictactoe.h header file that has prototypes:

#ifndef TICTACTOE_H_INCLUDED
#define TICTACTOE_H_INCLUDED

#include <iostream>
#include <cmath>

using namespace std;

class TicTacToe{

private:
// 10 element char board
int gameType, squareChoice, turnNum = 0;
char currentSymbol; // 'o' or 'x'

public:
static const int boardSize = 10;
char board[boardSize] = "123456789";


/*
Game status enumeration
*/
enum Status { WIN, DRAW, CONTINUE, QUIT };


/*
Function prototypes
*/
int getTurnNum(){return turnNum;}
int getSquareChoice(){return squareChoice;}
int getGameType(){return gameType;}
char getCurrentSymbol(){return currentSymbol;}
// showBoard: Show current state of board
void showBoard( const char board[], int boardSize );
// checkGameState: Returns WIN or CONTINUE
Status checkGameState( const char board[] );
int getHumanSquare( const char board[] );
int getComputerSquare( const char board[] );
// checkBadSquare: Checks to see if a chosen square is already taken; returns
// true if already taken; used by getHumanSquare and
// getComputerSquare functions above.
bool checkBadSquare( const char board[], int squareNum );
int getrandint( int min, int max );

};
#endif

you need to put your "prototypes" into a .h file. e.g you have no interfaces.
So according to what you said if I make int main() function like this:


int main(){

Tictactoe Tictactoe;
Tictactoe.initiliazeGame();

return 0;

}

is it gonna work? Bc the name of the header file is Tictactoe.h
errr my bad.

drinking a bit tonight.

why dont you start by using code tags so your code is easier to read?

If you put your code in code tags it would be so much more helpful for all.

You cant initialize variables this way in a class char board[boardSize] = "123456789";. Board should be initialised from within the constructor.

initializeGame() cant access private members of the class as it is not part of the class.

In TicTacTo.cpp you have not included reference to the class in your functions belonging to the class, i.e. you have void showBoard(const char board[], int size) when it should be void TicTacToe::showBoard(const char board[], int size).

There may be other errors but thats what stood out to me... as I said before, please stick your code in code tags to make it more readable.
Last edited on
Topic archived. No new replies allowed.