Piszę grę "Kółko i Krzyżyk" jednak w module mojej gry wyskakują błędy kompilacji z którymi nie potrafię sobie poradzić, szukałem w google podobnych problemów jednak nie przyniosło to skutku, dlatego zwracam się do was z prośbą o wskazanie gdzie leży problem.
Kod modułu game.cpp
#include "game.h"
#include <cstdlib>
#include <iostream>
class CPlansza {
private:
POLE m_aPlansza[][];
const LINIE[][][];
public:
CPlansza() {
m_aPlansza[3][3] = { { PUSTE, PUSTE, PUSTE },
{ PUSTE, PUSTE, PUSTE },
{ PUSTE, PUSTE, PUSTE } };
const LINIE[][ 3 ][ 2 ] = { { { 0 , 0 }, { 0 , 1 }, { 0 , 2 } }
{ { 1 , 0 }, { 1 , 1 }, { 1 , 2 } }
{ { 2 , 0 }, { 2 , 1 }, { 2 , 2 } }
{ { 0 , 0 }, { 1 , 0 }, { 2 , 0 } }
{ { 0 , 1 }, { 1 , 1 }, { 2 , 1 } }
{ { 0 , 2 }, { 1 , 2 }, { 2 , 2 } }
{ { 0 , 0 }, { 1 , 1 }, { 2 , 2 } }
{ { 2 , 0 }, { 1 , 1 }, { 0 , 2 } } };
}
bool SprawdzPole( unsigned uY, unsigned uX ) {
if ( m_aPlansza[uY][uX] == PUSTE ) return true;
else return false;
}
void Ustaw( unsigned uY, unsigned uX, ZNAK Gracz ) {
m_aPlansza[uY][uX] = static_cast<POLE>(Gracz);
}
POLE SprawdzLinie( int i, int j ) {
return m_aPlansza[LINIE[i][j][ 0 ]][LINIE[i][j][ 1 ]];
}
POLE PobierzPole( int i, int j ) {
return m_aPlansza[i][j];
}
};
class CGame {
private:
CPlansza* m_pPlansza;
STATUS *m_pStatus;
ZNAK *m_pAktualnyGracz;
public:
CGame() {
m_pPlansza = new CPlansza;
m_pStatus = new STATUS;
m_pAktualnyGracz = new ZNAK;
}
~CGame() {
delete m_pPlansza;
delete m_pGracz1;
delete m_pGracz2;
delete m_pStatus;
delete m_pAktualnyGracz;
}
bool Start() {
if ( *m_sStatus != NIEZACZETA ) return false;
srand(time(0));
*m_pAktualnyGracz = (rand() % 2 == 0 ? Z_KOLKO : Z_KRZYZYK );
else {
m_pGracz1->UstawZnak( Z_KRZYZYK );
m_pGracz2->UstawZnak( Z_KOLKO );
}
*m_pStatus = ZACZETA;
return true;
}
bool Ruch( unsigned uPole ) {
if ( *m_pStatus != ZACZETA ) return false;
if ( uPole < 1 ) return false;
if ( uPole >9 ) return false;
unsigned uY = ( uPole - 1 ) / 3;
unsigned uX = ( uPole -1 ) % 3;
if ( m_pPlansza->SprawdzPole( uY, uX ) == true ) m_pPlansza->Ustaw( uY, uY, *m_pAktualnyGracz);
else return false;
POLE Pole, ZgodnePole;
unsigned uZgodnychPol;
for ( int i=0; i<8; ++i ) {
Pole = ZgodnePole = PUSTE;
uZgodnychPol = 0;
for ( int j=0; j<3; ++j ) {
Pole = m_Plansza->PobierzPole( i, j );
if ( Pole != ZgodnePole ) {
ZgodnePole = Pole;
uZgodnychPol = 1;
}
else ++uZgodnychPol;
}
if ( uZgodnychPol == 3 && ZgodnePole != PUSTE ) {
*m_nStatus = WYGRANA;
return true;
}
unsigned uZapelnionePola = 0;
for ( int i=0; i<3; ++i ) {
for ( int j=0; j<3; j++ ) {
if ( m_pPlansza->PobierzPole( i, j ) != PUSTE ) ++uZapelnionePola;
}
}
if ( uZapelnionePola == 9 ) {
*m_nStatus = REMIS;
return true;
}
*m_pAktualnyGracz = (*m_pAktualnyGracz == Z_KOLKO ? Z_KRZYZYK : Z_KOLKO);
return true;
}
void Rysuj() {
system("cls");
std::cout << " KOLKO I KRZYZYK " << std::endl;
std::cout << "---------------------" << std::endl;
std::cout << std::endl;
std::cout << " -----" << std::endl;
for ( int i = 0 ; i < 3 ; ++i) {
std::cout << " |" ;
for ( int j = 0 ; j < 3 ; ++j) {
if ( *m_pPlansza->PobierzPole( i, j ) == PUSTE ) {
std::cout << i * 3 + j + 1 ;
}
else {
std::cout << static_cast<char>(*m_pPlansza->PobierzPole( i, j ));
}
}
std::cout << "|" << std::endl;
}
std::cout << " -----" << std::endl;
std::cout << std::endl;
switch ( *m_sStatus ) {
case GS_MOVE:
std::cout << "Podaj numer pola, w ktorym" << std::endl;
std::cout << "chcesz postawic ";
std::cout << ( *m_pAktualnyGracz == Z_KOLKO ? "kolko" : "krzyzyk" ) << ": ";
break;
case GS_WON:
std::cout << "Wygral gracz stawiajacy ";
std::cout << ( *m_pAktualnyGracz == Z_KOLKO ?
"kolka" : "krzyzyki" ) << "!" ;
break;
case GS_DRAW:
std::cout << "Remis!";
break;
}
}
};
Kod nagłówku game.h
#include <iostream>
#ifndef game_h
#define game_h
enum ZNAK { Z_KOLKO = 'O', Z_KRZYZYK = 'X' };
enum POLE { KOLKO = Z_KOLKO, KRZYZYK = Z_KRZYZYK, PUSTE };
enum STATUS { NIEZACZETA, ZACZETA, WYGRANA, REMIS };
class CPlansza {
private:
POLE m_aPlansza;
public:
CPlansza();
bool SprawdzPole( unsigned uY, unsigned uX );
void Ustaw( unsigned uY, unsigned uX, ZNAK Gracz );
POLE SprawdzLinie( int i, int j );
POLE PobierzPole( int i, int j );
};
class CGame {
private:
CPlansza* m_pPlansza;
STATUS *m_pStatus;
ZNAK *m_pAktualnyGracz;
public:
CGame();
~CGame();
bool Start();
bool Ruch( unsigned uPole );
void Rysuj();
};
#endif
Błędy przy kompilacji to:
22 C:\Dev-Cpp\Obiektowe\game.cpp redefinition of class CPlansza' 16 C:\Dev-Cpp\Obiektowe\game.h previous definition of
class CPlansza'
54 C:\Dev-Cpp\Obiektowe\game.cpp redefinition of class CGame' 26 C:\Dev-Cpp\Obiektowe\game.h previous definition of
class CGame'
171 C:\Dev-Cpp\Obiektowe\game.cpp expected }' at end of input 171 C:\Dev-Cpp\Obiektowe\game.cpp expected unqualified-id at end of input 171 C:\Dev-Cpp\Obiektowe\game.cpp expected
,' or `;' at end of input
Używam Dev-Cpp . Z góry dzięki wszystkim za pomoc.