Chcę napisać prostą, konsolową grę planszową - coś na wzór alkohińczyka. Po skompliowaniu programu wyświetla się: "Program alkohińczyk.exe przestał działać... ble ble ble". Mam w planie stworzyć jedną virtualną klasę bazową pole a w klasach które będą z niej dziedziczyć wyświetlać dodatkowo konkretny dla rodzaju pola napis i wykonywać charakterystyczne działanie. Póki co mam zunifikowaną tablicę wskaźników która niestety nie chce działać. Dodam że kiedy tablica zawierała obiekty a nie wskaźniki bylo ok. Program działał (póki co przesuwał pionki po planszy ;) ). Co jest nie tak?? Wczesniej pisałem program opierajacy się na tej samej zasadzie i wszystko działało. Oto kod:
#include <cstdlib>
#include <iostream>
#include <windows.h>
using namespace std;
void gotoxy(int x, int y)
{
COORD cord;
cord.X = x;
cord.Y = y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), cord);
}
class pole {
public:
pole() {wartosc=0; pionek1=0; pionek2=0; pionek3=0; pionek4=0;}
int zwx() {return x;}
void pocz() {pionek1=1;pionek2=1;pionek3=1;pionek4=1;}
void wprowWartosc(int a) {wartosc=a;}
void wprowX(int b) {x=b;}
void wprowY(int c) {y=c;}
void wprowP1(int d) {pionek1=d;}
void wprowP2(int e) {pionek2=e;}
void wprowP3(int f) {pionek3=f;}
void wprowP4(int g) {pionek4=g;}
// virtual void zadanie() = 0;
// virtual void dzialanie() = 0;
void rysuj() {gotoxy(x,y);
cout << " ____";
gotoxy(x,y+1);
cout << "|";
if (wartosc<=9) cout << wartosc << " "; else cout << wartosc;
cout << " |";
gotoxy(x,y+2);
cout << "| ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
if ((pionek1==1) && (pionek2==0)) cout << "A ";
else if ((pionek1==1) && (pionek2==1))
{
cout << "A";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
cout << "B";
}
else if ((pionek1==0) && (pionek2==1))
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 5);
cout << " B";
}
else cout << " ";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << " |" << endl;
gotoxy(x,y+3);
cout << "|_";
if ((pionek3==1) && (pionek4==0))
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
cout << "C";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "_";
}
else if ((pionek3==1) && (pionek4==1)){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 6);
cout << "C";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 9);
cout << "D";
}
else if ((pionek3==0) && (pionek4==1))
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "_";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),9);
cout << "D";
}
else
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "__";
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15);
cout << "_|" << endl;
}
private:
int wartosc,pionek1,pionek2,pionek3,pionek4,x,y;
};
pole* p[50];
class poleZwykle: public pole {
};
class poleNiespodzianka: public pole {
};
class poleKara: public pole {
};
class poleDopalacz: public pole {
};
int main()
{
int zy=0,i,j,zx=0,pomoc=0,kostka, wybor=1, pomoc2=1;
p[1]->pocz();
poleZwykle* pz = new poleZwykle;
poleKara* pk = new poleKara;
poleDopalacz* pd = new poleDopalacz;
poleNiespodzianka* pn = new poleNiespodzianka;
for(i=2;i<50;i++)
{
if (i%10==0) p[i]=pz;
else if (i%10==9) p[i]=pk;
else if (i%10==8) p[i]=pd;
else p[i]=pn;
}
for (i=1;i<51;i++)
{
p[i]->wprowWartosc(i);
}
for(j=1;j<6;j++)
{
for (i=1;i<11;i++)
{
p[i+pomoc]->wprowX(zx);
zx=zx+5;
p[i+pomoc]->wprowY(zy);
}
zy=zy+4;
zx=0;
pomoc=pomoc+10;
}
p[50]->wprowX(45);
p[50]->wprowY(16);
int a=1, b=1, c=1, d=1, kolejka=1;
while(!wybor==0)
{
srand(time(NULL));
kostka=rand() % 6;
if (kolejka%4==1) // wybór który gracz sie przesuwa
{
p[a]->wprowP1(0);
a=a+kostka+1;
p[a]->wprowP1(1);
}
else if (kolejka%4==2)
{
p[b]->wprowP2(0);
b=b+kostka+1;
p[b]->wprowP2(1);
}
else if (kolejka%4==3)
{
p[c]->wprowP3(0);
c=c+kostka+1;
p[c]->wprowP3(1);
}
else
{
p[d]->wprowP4(0);
d=d+kostka+1;
p[d]->wprowP4(1);
}
kolejka=kolejka+1;
for (i=1;i<51;i++)
{
p[i]->rysuj();
}
gotoxy(60,2);
cout << "Kostka: " << kostka+1;
gotoxy(60,4);
cout << "0 - wyjscie";
gotoxy(60,5);
cout << "1 - dalej";
gotoxy(60,6);
cout << "Wybor: ";
cin >> wybor;
system("cls");
}
return 0;
}