Jak wrócić na poprzedni ekran w grze Snake?

0

Witam,
Po uruchomieniu kodu i wejściu w grę, a następnie przegranie (tzn. cofnięcie się wężem do tyłu) wraca do menu gry. Po odpaleniu kodu drugi raz wyskakuje znowu napis "przegrałeś" jakby pętla była cały czas aktywna i wraca do menu. Prosiłbym o pomoc :)

#include <iostream>
#include <conio.h>
#include <string>
#include <windows.h>
using namespace std;

class GraSnake 
{
private:
	enum Kierunek //wyliczenia (stale calkowite) 4 kolejnych kierunkow poruszania sie weza
	{
		STOP = 0,
		LEWO,
		PRAWO,
		GORA,
		DOL
	};
	Kierunek Polozenie;
	int DlugWeza;
	bool Przegrana;
	bool WydrWeza;
	const int Dlugosc;
	const int Wysokosc;
	int WazX, WazY, OwocX, OwocY;
	int PolWezX[100], PolWezY[100];
	static void MENU();		//funkcja powiazana z klasa, ale nie konkretny obiekt tej klasy
	static void PRZEGRANA();
	void kla();
	void UstawWeza();
	void Plansza();
	void ZasaPlanszy();
	void StartGry();
public:
	GraSnake();
	void MenuGry();
};

GraSnake::GraSnake() :Wysokosc(22), Dlugosc(52) 
{
	DlugWeza = 0;
	Przegrana = false;
	WydrWeza = false;
	WazX = 0;
	WazY = 0;
	OwocX = 0;
	OwocY = 0;
	for (int i = 0; i < 100; i++) {
		PolWezX[i] = 0;
		PolWezY[i] = 0;
	}
}

void GraSnake::MENU() 
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 4);
	printf("            O O \n"); Sleep(50);
	printf("           dO Ob \n"); Sleep(50);
	printf("          dOO OOO \n"); Sleep(50);
	printf("         dOOO OOOb \n"); Sleep(50);
	printf("        dOOOO OOOOb \n"); Sleep(50);
	printf("        OOOOO OOOOO \n"); Sleep(50);
	printf("        OOOOO OOOOO \n"); Sleep(50);
	printf("        OOOOO OOOOO \n"); Sleep(50);
	printf("        YOOOO OOOOO \n"); Sleep(50);
	printf("         YOOO OOOP ****** GRA SNAKE ****** \n"); Sleep(50);
	printf("    oOOOOOOOOOOOOb	  1. GRA \n"); Sleep(50);
	printf("  oOOOOOOOOOOOOOOOb	  2. WYJSCIE \n"); Sleep(50);
	printf(" oOOOb dOOOOOOOOOOO \n"); Sleep(50);
	printf("OOOOOOOOOOOOOOOOOOO \n"); Sleep(50);
	printf("OOOOOOOOOOOOOOOOOOP \n"); Sleep(50);
	printf("OOOOOOOOOOOOOOOOOP \n"); Sleep(50);
	printf(" YOOOOOOOOOOOOOOP \n"); Sleep(50);
	printf("   YOOOOOOOOOOOP \n"); Sleep(50);
	printf("  %%%%%%%%%%%%%% \n"); Sleep(50);
	printf(" %%%%%%OOOjgsOOO \n"); Sleep(50);
	printf("!___/_______\___! \n"); Sleep(50);
}

void GraSnake::PRZEGRANA() 
{
	printf("Przegrales. \n"); Sleep(1000);
}

void GraSnake::kla() 
{
	if (_kbhit())
	{
		switch (_getch())
		{
		case 'a':
		case 'A':
			Polozenie = LEWO;
			break;
		case 'd':
		case 'D':
			Polozenie = PRAWO;
			break;
		case 'w':
		case 'W':
			Polozenie = GORA;
			break;
		case 's':
		case 'S':
			Polozenie = DOL;
			break;
		default:
			break;
		}
	}
}

void GraSnake::UstawWeza()
{
	Przegrana = false;
	Polozenie = STOP;
	WazX = Dlugosc / 2;
	WazY = Wysokosc / 2;
	OwocX = rand() % Dlugosc;
	OwocY = rand() % Wysokosc;
}

void GraSnake::Plansza() 
{
	cout << flush;
	system("cls");
	for (int i = 0; i < Dlugosc + 2; i++)
	{
		printf("-");
	}
	cout << "\n";
	for (int i = 0; i < Wysokosc; i++)
	{
		for (int j = 0; j < Dlugosc; j++)
		{
			if (j == 0)
			{
				printf("|");
			}
			if (i == WazY && j == WazX)
			{
				cout << "O";
			}
			else if (i == OwocY && j == OwocX)
			{
				cout << "@";
			}
			else
			{
				WydrWeza = false;
				for (int k = 0; k < DlugWeza; k++)
				{
					if (PolWezX[k] == j && PolWezY[k] == i)

					{
						cout << "o";
						WydrWeza = true;
					}
				}
				if (!WydrWeza)
				{
					printf(" ");
				}
			}
			if (j == Dlugosc - 1)
			{
				printf("|");
			}
		}
		cout << "\n";
	}
	for (int i = 0; i < Dlugosc + 2; i++)
	{
		printf("-");
	}
}

void GraSnake::ZasaPlanszy() 
{
	int poprzX = PolWezX[0];
	int poprzY = PolWezY[0];
	int poprzXX, poprzYY;
	PolWezX[0] = WazX;
	PolWezY[0] = WazY;
	for (int i = 1; i < DlugWeza; i++)
	{
		poprzXX = PolWezX[i];
		poprzYY = PolWezY[i];
		PolWezX[i] = poprzX;
		PolWezY[i] = poprzY;
		poprzX = poprzXX;
		poprzY = poprzYY;
	}
	switch (Polozenie)
	{
	case 1:
		WazX--;
		break;
	case 2:
		WazX++;
		break;
	case 3:
		WazY--;
		break;
	case 4:
		WazY++;
		break;
	default:
		break;
	}
	if (WazX >= Dlugosc)
	{
		WazX = 0;
	}
	else if (WazX < 0)
	{
		WazX = Dlugosc - 1;
	}
	if (WazY >= Wysokosc)
	{
		WazY = 0;
	}
	else if (WazY < 0)
	{
		WazY = Wysokosc - 1;
	}
	for (int i = 0; i < DlugWeza; i++)
	{
		if (PolWezX[i] == WazX && PolWezY[i] == WazY)
		{
			Przegrana = true;
		}
	}
	if (WazX == OwocX && WazY == OwocY)
	{
		OwocX = rand() % Dlugosc;
		OwocY = rand() % Wysokosc;
		DlugWeza += 1;
	}
}

void GraSnake::StartGry()
{
		UstawWeza();
		while (!Przegrana) 
		{
			Plansza();
			kla();
			ZasaPlanszy();
			Sleep(100);
		}
}

void GraSnake::MenuGry()
{
	char opcja = '\0';
	while (opcja != '2')
	{
		system("cls");
		MENU();
		opcja = _getch();
		system("cls");
		switch (opcja)
		{
		case '1':
			StartGry();
			system("cls");
			PRZEGRANA();
			break;
		case '2':
			cout << "WYCHODZENIE Z GRY";
			Sleep(500);
			break;
		default:
			break;
		}
	}
}

int main()
{
	GraSnake Snake;
	Snake.MenuGry();
	return 0;
}
1

Słyszałeś o debugerze?

0
_13th_Dragon napisał(a):

Słyszałeś o debugerze?

Tak słyszałem.
Sprawdzałem debugerem i jedyne co, to wartość położenia wskazuje na dziwną liczbę.
Możesz rozjaśnić mi trochę sprawę z debugerem ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1