Mój program po odpaleniu metody virtual void wczytaj_plansze_first(); się wysypuje( chyba tej).
Kod main:
#include <iostream>
#include "Klasy.h"
using namespace std;
void wybor(int opcja);
int main()
{
int opcja;
cout<<"Witaj!!\n1.Snake\n Jaka gre wybierasz: ";cin>>opcja;
wybor(opcja);
}
void wybor(int opcja)
{
Gra *wsk;
switch(opcja)
{
case 1:
{
Snake s;
wsk=&s;
wsk->start_game();
wsk->wczytaj_plansze_first();
wsk->logika();
}
default:
{
system("pause");
}
}
}
Kod Klasy.h :
#include <iostream>
using namespace std;
class Gra
{
public:
virtual void start_game()=0;
virtual void logika()=0;
virtual void wczytaj_plansze_first()=0;
virtual void plansza()=0;
virtual void game_over()=0;
virtual void pause()=0;
};
class Snake :public Gra
{
int candyy;
int candyx;
int pk;
int x[20];
int y[20];
char mapa[35][40];
public:
Snake(int=20, int=20, int=0);
virtual void logika();
virtual void wczytaj_plansze_first();
virtual void plansza();
virtual void game_over();
virtual void pause();
virtual void start_game();
};
Kod Klasy.cpp :
#include <iostream>
#include "Klasy.h"
#include <conio.h>
#include <cstdlib>
#include <time.h>
using namespace std;
Snake::Snake(int cy, int cx, int p)
{
candyy=cy;
candyx=cx;
pk=p;
}
void Snake::start_game()/////////////////////////////////////Rozpoczecie gry Snake/////////////////////////////////////////////////////
{
cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" Witaj!!\n Aby rozpoczac gre wcisnij enter: ";
getch();
cout<<endl;
system("cls");
cout<<candyx<<" "<<candyy<<endl;
}
void Snake::logika()
{
x[0]=1;
y[0]=1;
for(;;) /////////////////////////////////////nieskonczona petla/////////////////////////////////////////////
{
char znak;
znak=getch();
for(int i=pk;i>=1;i--)/////////////ten fragment tworzy dlugosc snake ////////////////////////////////////////
{
x[i]=x[i-1];
y[i]=y[i-1];
}
if(znak=='w'||znak=='W')y[0]--;
else if(znak=='s'||znak=='S')y[0]++;
else if(znak=='a'||znak=='A')
{
x[0]--;
for(int i=1;i<=pk;i++)if(x[0]==x[i]&&y[0]==y[i])Snake::game_over();
}
else if(znak=='d'||znak=='D')
{
x[0]++;
for(int i=1;i<=pk;i++)if(x[0]==x[i]&&y[0]==y[i])Snake::game_over();
}
else if(znak==int(27))Snake::pause();
system("cls");
if(x[0]==35||y[0]==41||x[0]==0||y[0]==0)Snake::game_over();
if(x[0]==candyx&&y[0]==candyy)
{
srand(time(NULL));
candyx=rand()%34+1;
candyy=rand()%39+1;
pk++;
}
cout<<"Score: "<<pk<<endl;
cout<<candyx<<" "<<candyy<<endl;
cout<<x[0]<<" "<<y[0]<<endl;
plansza();
}
}
void Snake::wczytaj_plansze_first()
{
for(int i=0;i<=35;i++)
{
cout<<'#';
mapa[i][0]='#';
}
cout<<endl;
for(int i=1;i<=40;i++)
{
for(int k=0;k<=35;k++)
{
if(i==1&&k==1)
{
cout<<"S";
mapa[1][1]=' ';
}
else if(i==candyy&&k==candyx)
{
cout<<'@';
mapa[k][i]='@';
}
else
{
if(k==0||k==35)
{
cout<<'#';
mapa[k][i]='#';
}
else
{
cout<<' ';
mapa[k][i]=' ';
}
}
}
cout<<endl;
}
for(int i=0;i<=35;i++)
{
cout<<'#';
mapa[i][40]='#';
}
cout<<endl;
}
void Snake::plansza()
{
for(int i=0;i<=40;i++)
{
for(int j=0;j<=35;j++)
{
if(j==1&&i==26)cout<<' ';
else if(j==1&&i==32)cout<<' ';
else if(j==32&&i==32)cout<<' ';
else if(j==26&&i==26)cout<<' ';
else if(j==0&&i==0)cout<<'#';
else if(x[0]==j&&y[0]==i)cout<<'S';
else if(x[1]==j&&y[1]==i)cout<<'S';
else if(x[2]==j&&y[2]==i)cout<<'S';
else if(x[3]==j&&y[3]==i)cout<<'S';
else if(x[4]==j&&y[4]==i)cout<<'S';
else if(x[5]==j&&y[4]==i)cout<<'S';
else if(x[6]==j&&y[5]==i)cout<<'S';
else if(x[7]==j&&y[7]==i)cout<<'S';
else if(x[8]==j&&y[8]==i)cout<<'S';
else if(x[9]==j&&y[9]==i)cout<<'S';
else if(x[10]==j&&y[10]==i)cout<<'S';
else if(x[11]==j&&y[11]==i)cout<<'S';
else if(x[12]==j&&y[12]==i)cout<<'S';
else if(x[13]==j&&y[13]==i)cout<<'S';
else if(x[14]==j&&y[14]==i)cout<<'S';
else if(x[15]==j&&y[15]==i)cout<<'S';
else if(x[16]==j&&y[16]==i)cout<<'S';
else if(x[17]==j&&y[17]==i)cout<<'S';
else if(x[18]==j&&y[18]==i)cout<<'S';
else if(x[19]==j&&y[19]==i)cout<<'S';
else if(x[20]==j&&y[20]==i)cout<<'S';
else if(candyx==j&&candyy==i)cout<<'@';
else if(j==35&&i==15)cout<<'#';
else if(j==35&&i==16)cout<<'#';
else if(j==35&&i==17)cout<<'#';
else if(j==35&&i==18)cout<<'#';
else if(j==35&&i==19)cout<<'#';
else if(j==35&&i==20)cout<<'#';
else if(j==35&&i==21)cout<<'#';
else if(j==35&&i==22)cout<<'#';
else if(j==35&&i==23)cout<<'#';
else if(j==35&&i==24)cout<<'#';
else if(j==35&&i==25)cout<<'#';
else if(j==35&&i==26)cout<<'#';
else if(j==35&&i==27)cout<<'#';
else if(j==35&&i==28)cout<<'#';
else if(j==35&&i==29)cout<<'#';
else if(j==35&&i==30)cout<<'#';
else if(j==35&&i==31)cout<<'#';
else if(j==35&&i==32)cout<<'#';
else if(j==35&&i==33)cout<<'#';
else if(j==35&&i==34)cout<<'#';
else if(j==35&&i==35)cout<<'#';
else if(j==35&&i==36)cout<<'#';
else if(j==35&&i==37)cout<<'#';
else if(j==35&&i==38)cout<<'#';
else if(j==35&&i==39)cout<<'#';
else cout<<mapa[j][i];
}
cout<<endl;
}
}
void Snake::game_over()
{
system("cls");
cout<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl<<endl;
cout<<" Game over!!\n Twoj wynik to: "<<pk;
cout<<"\n Play again: ";
getch();
system("cls");
Snake::start_game();
}
void Snake::pause()
{
system("cls");
short int opcja;
cout<<"1.Wznow gre\n2.Koniec gry\nTwoj wybor: ";cin>>opcja;
if(opcja==2)exit(0);
}
Wiem, że nie jest to normalny snake, ponieważ nie znam jeszcze wielowątkowości oraz wiem, że jest tu takie nie dobre rozwiązanie w plansza(); , ale nie udało mi się inaczej tego zrobić(wiele godzin próbowałem).