Dziwny błąd programu. Konsola-gra w kółko i krzyżyk

0

Oto co wyskakuje gdy kompiluje program. Jeszcze nie wszystkie funkcje zostały w nim napisane
user image

Dopiero się ucze i nie moge wyłapać żadnego błędu ;/ a może static nie działa gdy program "przenosi" sie z jednego pliku na drugi ?

oto kod programu:

plik main.cpp

 #include "game.hpp"
#include <iostream>
using namespace std ;

int main()
{
        while(1)
        {
            RysujPlansze();
            Ruch();
            if (( SprawdzWynik() == WW_CROSS ) || (SprawdzWynik()==WW_CIRCLE)) break;
            // dodaj tu potem funkcje
        }

        // zakonczenie
        cout<<"\n\nBrawo ! ";
        if (SprawdzWynik()== WW_CROSS) cout<<"Wygral KRZYZYK !! Gratulacje ;)";
        if (SprawdzWynik()==WW_CIRCLE) cout<<"Wygral KOLKO !! Gratulacje ;)";
}

plik game.cpp

#include "game.hpp"
#include <iostream>
#include <sstream>

using namespace std ;

static FIELD pole[9];                       //można tak zrobić by zapamietac plansze i aktualnego gracza ?
static PLAYER gracz=PLR_CROSS;              // ???

bool Ruch()
{
    int a;
    cout<<"Podaj nr pola na ktore chcesz postawic znak :";
    cin>>a;
    if (gracz==PLR_CIRCLE) pole[a]=FLD_CIRCLE;
    if (gracz==PLR_CROSS) pole[a]=FLD_CROSS;
    return 0;
}

bool RysujPlansze()   //ukonczone
{
    string znak[9];
    for(int i=1; i<=9 ; i++)     //zmiana FIELD na stringi
    {
        if (pole[i]==FLD_EMPTY)
        {
            ostringstream ss;
            ss << i;
            znak[i] = ss.str();
        }

        if (pole[i]==FLD_CROSS)
        {
            znak[i]="x";
        }

        if (pole[i]==FLD_CIRCLE)
        {
            znak[i]="o";
        }
    }

    //rysujemy ! xD
    cout<<"     _______"<<endl<<"     |"<<znak[1]<<"|"<<znak[2]<<"|"<<znak[3]<<"|";
    cout<<"     "<<endl<<"     |"<<znak[4]<<"|"<<znak[5]<<"|"<<znak[6]<<"|";
    cout<<"     "<<endl<<"     |"<<znak[7]<<"|"<<znak[8]<<"|"<<znak[9]<<"|"<<endl<<endl<<"     ";
}

WHOWIN SprawdzWynik()
{
    return WW_ANYBODY;
}

bool AktualnyGracz()
{
    if (gracz==PLR_CROSS) gracz=PLR_CIRCLE;                     //zmiana urzytkownika
    if (gracz==PLR_CIRCLE) gracz=PLR_CROSS;                     //z kolka na krzyzyk i odwrotnie
}

 

plik game.hpp

#ifndef game_hpp
#define game_hpp


enum SIGN {SGN_CIRCLE,SGN_CROSS};
enum FIELD {FLD_EMPTY,FLD_CIRCLE,FLD_CROSS};
enum GAMESTATE{GS_NOTSTARTED,GS_MOVE,GS_WON,GS_DRAW};
enum PLAYER{PLR_CROSS,PLR_CIRCLE};
enum WHOWIN{WW_CIRCLE,WW_CROSS,WW_ANYBODY};


bool Ruch();
bool RysujPlansze();
WHOWIN SprawdzWynik();
bool AktualnyGracz();



#endif
 
0

Tutaj jest błąd.

 string znak[9];
    for(int i=1; i<=9 ; i++)

tablica znak ma indeksy 0..8, a nie 1...9

1

No tak ale ja tam właśnie chciałem ominąć tą tablice zerową. Nigdzie dalej w kodzie nie mam żadnych działań z tablicą zerową..
No i wszystkie petle dalej zaczynaja sie od 1 nie zera... wiec blad chyba nie tu.. no chyba ze cos zle zrozumialem

A nie.. sory juz kapuje... temat do zamkniecia ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1