Witam. Pisze grę Tron z użyciem bliblioteki SFML i w celu określenia gdzie gracz zostawił ślad stworzyłem mapę w oparciu na tablicy dwuwymiarowej typu bool. Jak sie pewnie domyślacie na początku cała tablia jest wypełniona wartością false a tam gdzie gracz zostawił ślad zmieniamy na true, proste. Jenak zalerzało mi by ta gra była napisana obiektowo (Jest to moja pierwsza gra OOP) i dodatkowo podzielona na kilka plików. Wiec stworzyłem plik nagłówkowy i w nim wszystkie potrzebne deklaracje klas. I teraz sedno sprawy. Zadeklarowałem w tym pliku nagłówkowym tą tablice z użyciem "extern" i póżniej w pliku z definicjami metod klas zdefiniowałem. I teraz cały problem.
Plik .cpp z definicjami metod klas
const int W=800;//X
const int H=600;//Y
bool pole[600][800];
int Gracz::liczbaobiektow=1;
/////////////////////////////////////////////////////
/// KLASA GRACZ
Gracz::Gracz(Color color,int kierunek,int xpocztkowy,int ypoczatkowy)
{
if(liczbaobiektow==1)
/// by nie ustawiało tablicy dla nowych obietkow bo poco
for(int i=0; i<H; i++)
for(int j=0; j<W; j++)
pole[i][j]=false;
liczbaobiektow++;
/// NIZEJ RESZTA KODU NIE ISTOTNA
}
void Gracz::ruch()
/// wazna metoda ustawia obecna pozycje gracza na true i zmienia pozycje
{
pole[y][x]=true;
/// i to powinno na stale zmienic ta zmienna o takich indeksach
/// GORA DOL
if (dir==0)y+=1;
if (dir==3)y-=1;
/// NA BOKI
if (dir==1)x-=1;
if (dir==2)x+=1;
/// jak wyjdzie na bok
if (x>=W) x=0;
if (x<0) x=W-1;
if (y>=H) y=0;
if (y<0) y=H-1;
}
void Gracz::czykolizja()/// SEDNO PROBLEMU
{
if (pole[y][x])
/// I NIE OGARNIAM CZEMU TEN IF SIE NIE WYKONUJE
{
this->czyprzegral=true;
return;
}
Jak pokazałem nie rozumiem czemu ten "if" się nie wykonuje. Przecierz jest to tablica globalna i zmiana jej wartosci w metodzie "ruch()" powinna być widoczna wszędzie. W momencie kiedy linia gracza nalorzy sie na linie swoja albo przeciwnika to przecierz to miejsce powino miec wartość true. Pewnie coś źle robie w deklaracji tablicy ale nie wiem. Wiem że stosowanie zmiennych globalnych jest słabym pomysłem i próbowałem rozwiazać ten problem tworząc taką tablice w klasie "Gracz" static bool pole[600][800], ale nie wiem czy takie coś w ogole istnieje. Brałem to na logike bo static mówi że jest to zmienna która jest dla wszystkich obiektow tej klasy i jest tworzona tylko raz a jednoczesnie miałbym ta tablice schowana w klasie. Jeśli obrałem zła drogę to będę wdzieczny za wskazanie nowej. Dziękuje za pomoc i liczę na wyrozumiałość.