Zaczynam tworzyć prostą grę w c++ i pojawił się pewien problem. Program kompiluje się, ale potem przestaje działać. Błąd jest najprawdopodobniej w plansza::StanPlanszy, która powinna wyświetlać ile pionków poszczególnych graczy doszło do pól wygranych. Bardzo proszę o pomoc.
#include <iostream>
#include<iomanip>
using namespace std;
/////////////////////////////////////////////////////////
class pionek //klasa bazowa pionkow kazdego z graczy
{
private:
const char znak;
public:
pionek* nast;
friend class pole;
friend class plansza;
pionek(const char znak):znak(znak), nast(NULL){}
virtual bool WPolu() {return true;};
};
//////////////////////////////////////////////////////////
class gracz : private pionek //klasa gracza, bazujaca na klasie pionek
{
private:
int x, y; //wspolrzedne pionka na planszy
public:
gracz(const char znak='*'):pionek(znak){};
bool WPolu(){
if(x>12 && y>12) return true;
else return false;
}
};
//////////////////////////////////////////////////////////
class komputer : private pionek //klasa komputera, bazujaca na klasie pionek
{
private:
int x, y; //wspolrzedne pionka na planszy
public:
friend void StanPlanszy();
komputer(const char znak='o'):pionek(znak){};
bool WPolu(){
if(x<5 && y<5) return true;
else return false;
}
};
////////////////////////////////////////////////////////
class pole // klasa pol planszy
{
public:
char symbol;
int typ; // 0 - wolne, 1 - zajete
pole() : symbol(' '), typ(0) {} // konstruktor, na poczatku nie ma na nim pionkow, wiec pole jest puste
pole(char symbol1, int typ1)
:
symbol(symbol1),
typ(typ1){}
void wyswietl() {
cout << " ";
cout << symbol << " ";
}
};
///////////////////////////////////////////////////////////
class plansza
{
public:
pole ***wsk; // wskaznik do wskaznika na wskaznik
plansza(){ // konstruktor planszy
wsk=new pole**[18]; // plansza jest 2-wymiarowa tablica wskaznikow do pol
for(int i=0; i<18; i++){ // rozmiar 18 a plansza 16x16, zeby nie bylo przekroczenia zakresu
wsk[i]=new pole*[18];
for(int j=0; j<18; j++){
wsk[i][j]=new pole(); // pojedyncze pole
}
}
}
void usunPion(pionek* p, int x, int y){
wsk[x][y]->symbol=' ';
wsk[x][y]->typ=0;
}
void postawPion(pionek* p, int x, int y){
wsk[x][y]->symbol=p->znak;
wsk[x][y]->typ=1;
}
~plansza(){ // destruktor planszy, wykonuje sie kiedy plansza jest niszczona czyli po zakonczeniu gry
cout << "Niszcze plansze - jestem destruktorem." << endl; // sprawdza, czy destruktor zadzialal
for(int i=0; i<18; i++){ // zwolnienie zaalokowanej pamieci
for(int j=0; j<18; j++){
delete wsk[i][j]; // usuwa pola po kolei
}
delete wsk[i]; // usuwa tablice pol
}
delete wsk; // usuwa tablice tablic
}
void wyswietl(){ // wyswietlanie planszy
system("cls"); // czyszczenie ekranu
for(int i=1; i<=16; i++){ // wyswietlenie 16 wierszy
cout << setw(2) << i << " "; // rowne odstepy miedzy polami
for(int j=1; j<=16; j++)
wsk[i-1][j-1]->wyswietl(); // wyswietlanie 16 kolumn
cout << endl;
}
cout << " 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n\n";
}
**void StanPlanszy(){
int graczowe=0;
int kompowe=0;
pole **pole_gracza, **pole_kompa;
int a=5;
for(int i=0;i<19;i++){
for(int j=0; j<5; j++){ //wybieranie odpowiednich pol na pola gracza, czyli pola do ktorych ma dojsc
if(j>1)--a;
for(int k=0; k<a; k++){
pole_gracza[i]=new pole();
pole_gracza[i]=wsk[16-k-1][16-j-1];
}
}
}
int b=5;
for(int i=0;i<19;i++){
for(int j=0; j<5; j++){ //wybieranie odpowiednich pol na pola komputera, czyli pola, do ktorych ma dojsc
if(j>1)--b;
for(int k=0; k<b; k++){
pole_kompa[i]=new pole();
pole_kompa[i]=wsk[k][j];
}
}
}
for(int i=0;i<17;i++){
for(int j=0;j<17;j++){
for(int k=0;k<19;k++){
if(wsk[i][j]->typ==1 && wsk[i][j]->symbol==('*')){ //sprawdzanie, czy na polach gracza znajduje sie jego pionek
if(wsk[i][j]==pole_gracza[k]) graczowe++;}
else if(wsk[i][j]->typ==1 && wsk[i][j]->symbol==('o')){ //sprawdzanie, czy na polach komputera znajduje sie jego pionek
if(wsk[i][j]==pole_kompa[k]) kompowe++;}
}
}
}
cout << graczowe << " pionkow w polu gracza." << endl;
cout << kompowe << " pionkow w polu komputera." <<endl;
};**
};
int main(){
plansza halma;
gracz *nowy_gracza;
komputer *nowy_kompa;
int a=5; //zmienna okreslajaca ilosc pionkow w danym rzedzie
for(int i=0; i<20; i++){ //tworzenie pionkow graczy
nowy_gracza = new gracz();
nowy_kompa = new komputer();
}
for(int j=0; j<5; j++){ //wstawianie pionkow w odpowiednie pola
if(j>1)--a;
for(int k=0; k<a; k++){
halma.postawPion((pionek*)nowy_gracza, k, j);
halma.postawPion((pionek*)nowy_kompa, 16-k-1,16-j-1);
}
}
halma.wyswietl();
**halma.StanPlanszy(); //problem jest chyba tu, bo jak to wykomentuje, to dziala**
return 0;
}