Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kólko i krzyżyk - pomoc

Ostatnio zmodyfikowano 2011-12-28 22:20
Autor Wiadomość
Patryk2808
Temat założony przez niniejszego użytkownika
Kólko i krzyżyk - pomoc
» 2011-12-28 17:06:49
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;
}
P-46502
SeaMonster131
» 2011-12-28 17:23:52
Coś nie wydaje mi się, że napisałeś taki kod, a nie potrafisz rozwiązać takich prostych błędów.
A prosić to się może świnia. Google naprawdę nie gryzie.
P-46503
Patryk2808
Temat założony przez niniejszego użytkownika
» 2011-12-28 17:34:19
Program ten robilem wedlug poradnika, tam nie bylo bledow
P-46504
ptaq
» 2011-12-28 18:05:51
wiec sprawdz wszystko jeszcze raz po kolei i napewno znajdziesz błędy.
P-46505
Patryk2808
Temat założony przez niniejszego użytkownika
» 2011-12-28 19:01:11
czy problemem moze byc to ze w poradniku byl uzywany program visual c++, a ja mam code::blocks?
P-46514
Enigmus
» 2011-12-28 19:08:45
Jestem zielony{dopiero zaczynam} ale na pewno błędem nie może być używany program.
P-46515
Dark
» 2011-12-28 19:23:03
Z kursu Xiona to jest też miałem problem jak go kiedyś czytałem. Rozwiązaniem jest albo napisz to po swojemu lub przeanalizuj wszystko dokładnie i popraw przestarzały kod :)
P-46519
Mrovqa
» 2011-12-28 19:23:41
@2x up mylisz się :P
Wystarczy podstawowy angielski, aby zrozumieć te błędy... albo google. Autor po prostu używa czegoś, czego nie zadeklarował/zdefiniował :)
P-46520
« 1 » 2
  Strona 1 z 2 Następna strona