Prosiłbym o sprawdzenie poniższych kodów, ponieważ wyswietlaja mi sie bledy:
yk\game.cpp||In function 'bool StartGry()':|
yk\game.cpp|17|error: 'GS_NOTSRARTED' was not declared in this scope|
yk\game.cpp|20|error: 'srand' was not declared in this scope|
yk\game.cpp|21|error: 'rand' was not declared in this scope|
yk\game.cpp||In function 'bool Ruch(unsigned int)':|
yk\game.cpp|47|error: ISO C++ forbids declaration of 'LINIE' with no type|
yk\game.cpp|146|error: expected unqualified-id before '{' token|
||=== Build finished: 5 errors, 0 warnings ===|
game.cpp
#include "game.h"
#include <iostream>
#include <ctime>
FIELD g_aPlansza[3][3] = { { FLD_EMPTY, FLD_EMPTY, FLD_EMPTY },
{ FLD_EMPTY, FLD_EMPTY, FLD_EMPTY },
{ FLD_EMPTY, FLD_EMPTY, FLD_EMPTY }
};
GAMESTATE g_StanGry = GS_NOTSTARTED;
SIGN g_AktualnyGracz;
bool StartGry()
{
if (g_StanGry != GS_NOTSRARTED) return false;
// losujemy gracza, który bêdzie zaczyna³
srand(time(NULL));
g_AktualnyGracz = (rand() % 2 == 0 ? SGN_CIRCLE : SGN_CROSS);
// ustawiamy stan gry na ruch graczy
g_StanGry = GS_MOVE;
return true;
}
bool Ruch(unsigned uNumerPola)
{
if (g_StanGry != GS_MOVE) return false;
if (!(uNumerPola >= 1 && uNumerPola <= 9)) return false;
unsigned uY = (uNumerPola - 1) / 3;
unsigned uX = (uNumerPola - 1) % 3;
if (g_aPlansza[uY][uX] == FLD_EMPTY)
g_aPlansza[uY][uX] = static_cast<FIELD>(g_AktualnyGracz);
else
return false;
const LINIE[][3][2] = { { { 0,0 }, { 0,1 }, { 0,2 } }, // górna pozioma
{ { 1,0 }, { 1,1 }, { 1,2 } },// œrod. pozioma
{ { 2,0 }, { 2,1 }, { 2,2 } },// dolna pozioma
{ { 0,0 }, { 1,0 }, { 2,0 } }, // lewa pionowa
{ { 0,1 }, { 1,1 }, { 2,1 } }, // œrod. pionowa
{ { 0,2 }, { 1,2 }, { 2,2 } }, // prawa pionowa
{ { 0,0 }, { 1,1 }, { 2,2 } }, // p. backslashowa
{ { 2,0 }, { 1,1 }, { 0,2 } }
}; // p. slashowa
FIELD Pole, ZgodnePole;
unsigned uLiczbaZgodnychPol;
for (int i = 0; i < 8; ++i)
{
// i przebiega po kolejnych mo¿liwych liniach (jest ich osiem)
// zerujemy zmienne pomocnicze
Pole = ZgodnePole = FLD_EMPTY; // obie zmienne == FLD_EMPTY
uLiczbaZgodnychPol = 0;
for (int j = 0; j < 3; ++j)
{
// j przebiega po trzech polach w ka¿dej linii
// pobieramy rzeczone pole
// to zdecydowanie najbardziej pogmatwane wyra¿enie :)
Pole = g_aPlansza[LINIE[i][j][0]][LINIE[i][j][1]];
// jeœli sprawdzane pole ró¿ne od tego, które ma siê zgadzaæ...
if (Pole != ZgodnePole) //jesli np kolko nie jest rowne kolko
{
ZgodnePole = Pole;
uLiczbaZgodnychPol = 1;
}
else
// jeœli natomiast oba pola siê zgadzaj¹, no to
// inkrementujemy licznik takich zgodnych pól
++uLiczbaZgodnychPol;
}
// teraz sprawdzamy, czy uda³o nam siê zgodziæ liniê
if (uLiczbaZgodnychPol == 3 && ZgodnePole != FLD_EMPTY)
{
// je¿eli tak, no to ustawiamy stan gry na wygran¹
g_StanGry = GS_WON;
// przerywamy pêtlê i funkcjê
return true;
}
}
unsigned uLiczbaZapelnionychPol = 0;
for (int i = 0; i < 3; ++i)
for (int j = 0; j < 3; ++j)
if (g_aPlansza[i][j] != FLD_EMPTY)
++uLiczbaZapelnionychPol;
if (uLiczbaZapelnionychPol == 3*3)
{
g_StanGry = GS_DRAW;
return true;
}
g_AktualnyGracz = (g_AktualnyGracz == SGN_CIRCLE ?
SGN_CROSS : SGN_CIRCLE);
return true;
}
bool RysujPlansze();
{
if (g_StanGry == GS_NOTSTARTED) return false;
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)
{
// lewa część ramki
std::cout << " |";
// wiersz
for (int j = 0; j < 3; ++j)
{
if (g_aPlansza[i][j] == FLD_EMPTY)
// numer pola
std::cout << i * 3 + j + 1;
else
std::cout << static_cast<char>(g_aPlansza[i][j]);
}
// prawa część ramki
std::cout << "|" << std::endl;
}
std::cout << " -----" << std::endl;
std::cout << std::endl;
switch (g_StanGry)
{
case GS_MOVE:
// prośba o następny ruch
std::cout << "Podaj numer pola, w ktorym" << std::endl;
std::cout << "chcesz postawic ";
std::cout << (g_AktualnyGracz == SGN_CIRCLE ?
"kolko" : "krzyzyk") << ": ";
break;
case GS_WON:
// informacja o wygranej
std::cout << "Wygral gracz stawiajacy ";
std::cout << (g_AktualnyGracz == SGN_CIRCLE ?
"kolka" : "krzyzyki") << "!";
break;
case GS_DRAW:
// informacja o remisie
std::cout << "Remis!";
break;
}
}
game.h
enum SIGN { SGN_CIRCLE = 'O',
SGN_CROSS = 'X'
};
enum FIELD { FLD_EMPTY,
FLD_CIRCLE = SGN_CIRCLE,
FLD_CROSS = SGN_CROSS
};
enum GAMESTATE { GS_NOTSTARTED, GS_MOVE, GS_WON, GS_DRAW };
extern GAMESTATE g_StanGry;
// prototypy funkcji
//------------------
// rozpoczêcie gry
bool StartGry();
// wykonanie ruchu
bool Ruch(unsigned);
// rysowanie planszy
bool RysujPlansze();
main.cpp
#include <iostream>
#include <conio.h>
#include "game.h"
int main()
{
StartGry();
for (;;)
{
bool RysujPlansze();
if (g_StanGry == GS_MOVE)
{
unsigned uNumerPola;
std::cin >> uNumerPola;
Ruch (uNumerPola);
}
else if (g_StanGry == GS_WON || g_StanGry == GS_DRAW)
break;
}
return 0;
}