• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program przestaje działać - Obiektowy c++

0 głosów
196 wizyt
pytanie zadane 24 listopada 2019 w C i C++ przez Wiktor Michalski Początkujący (430 p.)

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).

1 odpowiedź

+1 głos
odpowiedź 24 listopada 2019 przez j23 Mędrzec (195,220 p.)
wybrane 24 listopada 2019 przez Wiktor Michalski
 
Najlepsza
Indeksujesz tablice poza zakresem.

Jeśli tablica ma dwadzieścia elementów, to indeks nie może mieć wartości 20.

Podobne pytania

+5 głosów
1 odpowiedź 1,583 wizyt
0 głosów
0 odpowiedzi 309 wizyt
0 głosów
4 odpowiedzi 435 wizyt
pytanie zadane 27 października 2015 w C i C++ przez barteku12 Obywatel (1,340 p.)

93,771 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,373 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...