chcę stworzyć prostą grę łączącą kółko i krzyżyk i zasadami działania maszyny Turinga, w tym celu stworzyłem klasę PLANSZA która przechowuje wszystkie potrzebne zmienne i funkcje do działania tej gry.
w pliku plansza.cpp napisałem metody klasy i dodatkowo skorzystałem z funkcji ażeby kod był czytelniejszy. jednak w funcjach potrzebne mi są zmienne z klasy PLANSZA , a sposób w który chciałem to zaimplementować wyrzuca błąd.
nazwa błędu to [Error] invalid use of non-static data member 'plansza::gracz'
main.cpp
#include <iostream>
#include "plansza.h"
using namespace std;
int main() {
plansza gra;
gra.gracz='X';
gra.pozycja=1;
while(true)
{
gra.wyswietl();
gra.ruch();
gra.wygrana();
}
return 0;
}
plansza.h
#include <iostream>
using namespace std;
class plansza
{
public:
int pozycja; //pozycja strzałki
char tasma[3]; //tablica bedzie taśmą czyli polami planszy
char gracz; //zawiera informacje o tym który gracz wykonuje ruch jako pierwszy
void ruch(); //wykonuje ruch
void wygrana(); //spraedza czy lub który gracz wygrał
void wyswietl(); //wyswietla plansze
};
plansza.cpp
#include "plansza.h"
#include <iostream>
char zmiana() //zwraca znak przeciwnego gracza
{
if(plansza::gracz='X') return 'O';
if(plansza::gracz='O') return 'X';
}
void zmianapozycji(char kierunek) // zmienia przesuwa pozycje w prawo lub lewo
{
if(kierunek=='L') plansza::pozycja--;
if(kierunek=='P') plansza::pozycja++;
if(plansza::pozycja==0) plansza::pozycja++;
if(plansza::pozycja==4) plansza::pozycja--;
}
void zmianaznaku(char czynadpisac,char znak) //nadpisuje znak
{
if(czynadpisac=='T')
{
if(plansza::tasma[pozycja]=='X') plansza::tasma[pozycja]='O';
if(plansza::tasma[pozycja]=='O') plansza::tasma[pozycja]='X';
if(plansza::tasma[pozycja]=='0') plansza::tasma[pozycja]=znak;
}
}
//metody planszy
void plansza::ruch()
{
char graczdrugi=zmiana(gracz); //przechowuje informacje o tym kto jest 2 graczem
char przemieszczeniex; //przechowuje informacje o przemiesczeniu gracza 1
char przemieszczeniey; //przechowuje informacje o przemiesczeniu gracza 2
char nadpisaniex; //przechowuje informacje o tym czy gracz 1 nadpisuje znak
char nadpisaniey; //przechowuje informacje o tym czy gracz 2 nadpisuje znak
cout<<"kolej gracza"<<gracz<<endl;
<<"w ktora strone chcesz sie przemiescic? L/P"<<endl;
cin>>przemieszczeniex; //przechowuje informacje o przemieszczeniu gracza 1
cout<<endl<<"czy chcesz nadpisac? T/N"<<endl;
cin>>nadpisaniex; //przechowuje informacje o nadpisaniu gracza 1
cout<<"kolej gracza"<<graczdrugi<<endl;
<<"w ktora strone chcesz sie przemiescic? L/P"<<endl;
cin>>przemieszczeniey; //przechowuje informacje o przemieszczeniu gracza 2
cout<<endl<<"czy chcesz nadpisac? T/N"<<endl;
cin>>nadpisaniey; //przechowuje informacje o nadpisaniu gracza 2
zmianapozycji(przemieszczeniex);
zmianaznaku(nadpisaniex,gracz);
zmianapozycji(przemieszczeniey);
zmianaznaku(nadpisaniey,graczdrugi);
gracz=zmiana(gracz); //na koniec zmienia gracza pierwszego z drugim
}
void plansza::wygrana() //jesli wszytkie 3 znaki sa takie same wygrywa gracz o tym znaku
{
if(tasma[0]==tasma[1]==tasma[2]=='X'){
cout<<"wygral gracz X"<<endl;
exit(0);
}
if(tasma[0]==tasma[1]==tasma[2]=='O'){
cout<<"wygral gracz O"<<endl;
exit(0);
}
}
void plansza::wyswietl() //wyswietla plansze
{
for(int i=0;i<(pozycja-1);i++)
{
cout<<" /t";
}
cout<<"V"<<endl;
for(int i=0;i<3;i++)
{
cout<<tasma[i]<<"\t";
}
}