Ponowne rozpoczęcie gry snake

0

Cześć wszystkim,

Próbowałem dodać do mojego snake'a funkcję następnych prób, jednak za każdym razem po przegranej rozgrywce i odpowiedzi na pytanie "Chcesz zagrac jeszcze raz?" wyskakuje błąd.

#include <iostream>
#include <cstdlib>
#include <conio.h>
#include <Windows.h>
#include <time.h>

using namespace std;

int szerokosc, wysokosc, rozmiar, szybkosc;
int Xwaz, Ywaz, Xserce, Yserce;
int dlugosc = 4, Xpamiec[10000], Ypamiec[10000];
int ile = 0;
int punkty;
int klawisz;
int wybor = 'T';
string nick;
char waz = 178, sciana = 219, serce = 176;
char kierunek = 'g';
char pole[25][25]; //liczba pól


//kursor do odświeżania

void kursordo(int x, int y)
{
	HANDLE hCon;
	COORD dwPos;

	dwPos.X = x;
	dwPos.Y = y;

	hCon = GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hCon, dwPos);
}


int main()
{
	//Chowanie kursora-----------------------------------------------------------------------------------------------------

	{
		HANDLE hStdOut = NULL;
		CONSOLE_CURSOR_INFO curInfo;

		hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
		GetConsoleCursorInfo(hStdOut, &curInfo);
		curInfo.bVisible = FALSE;
		SetConsoleCursorInfo(hStdOut, &curInfo);
	}

	//Tytuł----------------------------------------------------------------------------------------------------------------

	{
		system("cls");
		printf("\n\n\n");
		printf("\t\t  SSSS                       kk\n");
		printf("\t\t SS   SS                     kk\n");
		printf("\t\t SS   SS                     kk\n");
		printf("\t\t SS        nnnnn     aaaa    kk  kk    eeee\n");
		printf("\t\t  SSS      nn  nn   aa  aa   kk kk    ee  ee\n");
		printf("\t\t    SSS    nn  nn     aaaa   kkkk     eeeeee\n");
		printf("\t\t      SS   nn  nn    aa aa   kkk      ee\n");
		printf("\t\t SS   SS   nn  nn   aa  aa   kkkk     ee\n");
		printf("\t\t SS   SS   nn  nn   aa  aa   kk kk    ee  ee\n");
		printf("\t\t  SSSSS    nn  nn    aaaaa   kk  kk    eeee\n\n\n");
	}

	//Wybór poziomu trudności i nicku--------------------------------------------------------------------------------------

	{
		cout << endl;
		cout << "Wpisz swoj nick: ";
		cin >> nick;

		Sleep(800);

		cout << endl << endl;
		cout << "Wybierz rozmiar planszy:" << endl;
		cout << "1. Duza" << endl;
		cout << "2. Srednia" << endl;
		cout << "3. Mala" << endl;
		cout << endl;
		cout << "Rozmiar: ";
		cin >> rozmiar;
		cout << endl;

		switch (rozmiar)
		{
		case 1:
			szerokosc = 27;
			wysokosc = 27;
			cout << "Wybrales DUZA plansze" << endl;
			break;
		case 2:
			szerokosc = 19;
			wysokosc = 19;
			cout << "Wybrales SREDNIA plansze" << endl;
			break;
		case 3:
			szerokosc = 11;
			wysokosc = 11;
			cout << "Wybrales MALA plansze" << endl;
			break;
		default:
			szerokosc = 19;
			wysokosc = 19;
			cout << "Wybrales SREDNIA plansze" << endl;
			break;
		}

		Sleep(800);

		cout << endl << endl;
		cout << "Teraz wybierz szybkosc twojego bydlaka:" << endl;
		cout << "1. Wolny" << endl;
		cout << "2. Szybki" << endl;
		cout << "3. Bardzo szybki" << endl;
		cout << endl;
		cout << "Szybkosc: ";
		cin >> szybkosc;
		cout << endl;

		switch (szybkosc)
		{
		case 1: cout << "Wybrales WOLNY" << endl; break;
		case 2: cout << "Wybrales SZYBKI" << endl; break;
		case 3: cout << "Wybrales BARDZO SZYBKI" << endl; break;
		default:cout << "Wybrales SZYBKI" << endl; break;
		}

		Sleep(800);
	}

	do
	{
		//Deklarowanie pól-----------------------------------------------------------------------------------------------------

		{
			//wszystkie puste pola
			for (int i = 0; i < wysokosc; i++)
			{
				for (int j = 0; j < szerokosc; j++)
				{
					pole[j][i] = 'p';
				}
			}

			//losowanie
			srand(time(NULL));

			//start węża
			Xwaz = szerokosc / 2;
			Ywaz = wysokosc / 2;
			pole[Xwaz][Ywaz] = 'w';

			//losowanie pól z sercami (w przypadku wylosowania złego pola losuje jeszcze raz)
			do {
				switch (rozmiar) {
				case 1:
				{
					Xserce = rand() % 23 + 1;
					Yserce = rand() % 23 + 1;
					break;
				}
				case 2:
				{
					Xserce = rand() % 17 + 1;
					Yserce = rand() % 17 + 1;
					break;
				}
				case 3:
				{
					Xserce = rand() % 9 + 1;
					Yserce = rand() % 9 + 1;
					break;
				}
				}
			} while (pole[Xserce][Yserce] != 'p');
			pole[Xserce][Yserce] = 'j';
		}

		//Rysowanie planszy----------------------------------------------------------------------------------------------------

		{
			//czyszczenie konsoli
			system("CLS");
			kursordo(0, 0);

			//góra
			for (int i = 0; i <= szerokosc;i++)
			{
				cout << sciana << sciana;
			}

			//boki i środek
			for (int i = 0; i < wysokosc;i++)
			{
				cout << endl << sciana;
				for (int j = 0; j < szerokosc; j++)
				{
					if (pole[j][i] == 'p') cout << "  ";
					if (pole[j][i] == 'w') cout << waz << waz;
					if (pole[j][i] == 'j') cout << serce << serce;
				}
				cout << sciana;
			}
			// dół
			cout << endl;
			for (int i = 0; i <= szerokosc;i++)
			{
				cout << sciana << sciana;
			}
		}

		//Pętla gry------------------------------------------------------------------------------------------------------------

		for (;;)
		{
			//liczba cyklów i prędkość-----------------------------------------------------------------------------------------

			{
				ile++;
				Xpamiec[ile] = Xwaz;
				Ypamiec[ile] = Ywaz;

				Sleep(szybkosc * -200 + 650);
			}


			//Poruszanie się węża i punkty-------------------------------------------------------------------------------------

			{
				//sterowanie
				if (_kbhit())
				{
					klawisz = _getch();
					if (klawisz == 'w' && kierunek != 'd') kierunek = 'g';
					if (klawisz == 's' && kierunek != 'g') kierunek = 'd';
					if (klawisz == 'a' && kierunek != 'p') kierunek = 'l';
					if (klawisz == 'd' && kierunek != 'l') kierunek = 'p';
				}

				//pełzanie do przodu
				if (kierunek == 'g') Ywaz--;
				if (kierunek == 'd') Ywaz++;
				if (kierunek == 'l') Xwaz--;
				if (kierunek == 'p') Xwaz++;

				//podknięcie
				if (pole[Xwaz][Ywaz] == 'w')
				{
					system("CLS");
					break;
				}

				//punkty
				if (pole[Xwaz][Ywaz] == 'j')
				{
					dlugosc++;
					punkty++;
					do {
						switch (rozmiar) {
						case 1:
						{
							Xserce = rand() % 23 + 1;
							Yserce = rand() % 23 + 1;
							break;
						}
						case 2:
						{
							Xserce = rand() % 17 + 1;
							Yserce = rand() % 17 + 1;
							break;
						}
						case 3:
						{
							Xserce = rand() % 9 + 1;
							Yserce = rand() % 9 + 1;
							break;
						}
						}
					} while (pole[Xserce][Yserce] != 'p');
					pole[Xserce][Yserce] = 'j';
					kursordo(Xserce * 2 + 1, Yserce + 1);
					cout << serce << serce;
				}
				else
				{
					//usuwanie ogona
					pole[Xpamiec[ile - dlugosc]][Ypamiec[ile - dlugosc]] = 'p';
					kursordo(Xpamiec[ile - dlugosc] * 2 + 1, Ypamiec[ile - dlugosc] + 1);
					cout << "  ";
				}

				//przechodzenie przez ściany
				if (Xwaz == szerokosc) Xwaz = 0;
				if (Xwaz == -1) Xwaz = szerokosc - 1;
				if (Ywaz == wysokosc) Ywaz = 0;
				if (Ywaz == -1) Ywaz = wysokosc - 1;

				pole[Xwaz][Ywaz] = 'w';
				kursordo(Xwaz * 2 + 1, Ywaz + 1);
				cout << waz << waz;
			}
		}

		//Co po przegranej-----------------------------------------------------------------------------------------------------

		{
			printf("\n\n\n");
			printf("\t\t  GGGGGG                                \n");
			printf("\t\t GG    GG                               \n");
			printf("\t\t GG                                     \n");
			printf("\t\t GG          aaaa    mmmm  mmm     eeee \n");
			printf("\t\t GG         aa  aa   mm  mm  mm   ee  ee\n");
			printf("\t\t GG   GGG     aaaa   mm  mm  mm   eeeeee\n");
			printf("\t\t GG    GG    aa aa   mm  mm  mm   ee    \n");
			printf("\t\t GG    GG   aa  aa   mm  mm  mm   ee    \n");
			printf("\t\t GG    GG   aa  aa   mm  mm  mm   ee  ee\n");
			printf("\t\t  GGGGGG     aaaaa   mm  mm  mm    eeee \n");

			Sleep(2000);

			printf("\n\n\n");
			printf("\t\t  OOOOOO                              !!\n");
			printf("\t\t OO    OO                             !!\n");
			printf("\t\t OO    OO                             !!\n");
			printf("\t\t OO    OO   vv   vv    eeee    rrrrr  !!\n");
			printf("\t\t OO    OO   vv   vv   ee  ee   rr  rr !!\n");
			printf("\t\t OO    OO    vv vv    eeeeee   rr  rr !!\n");
			printf("\t\t OO    OO    vv vv    ee       rr     !!\n");
			printf("\t\t OO    OO     vvv     ee       rr       \n");
			printf("\t\t OO    OO     vvv     ee  ee   rr       \n");
			printf("\t\t  OOOOOO       v       eeee    rr     !!\n");

			Sleep(2000);

			cout << endl << endl << "\t\tSCORE: " << punkty << endl;

			Sleep(1000);

			cout << endl << endl << "\t\tChcesz zagrac jeszcze raz?";
			cout << endl << endl << "\t\t    Tak: T      Nie: N" << endl;
			cout << "\t\t";
			cin >> wybor;
		}
	}  while (wybor == 'T');

	return 0;
}

Bardzo proszę o pomoc bo z c++ i programowaniem nie mam dużego doświadczenia.

1
Mikołaj Kondela napisał(a):

Bardzo proszę o pomoc bo z c++ i programowaniem nie mam dużego doświadczenia.

Zacznij od prostszych i rosnących powoli z kwalifikacja projektów. A te ASCI-arty to na koniec
Po drodze, ważniejsze niż osiągniecie jakiegoś tam działającego użytkowego programu, nauczenie się warsztatu np debugera

5

Offtopic: Gra typu snake z użyciem std::cout to nieporozumienie.
std::cout jest połączone ze standardowym wyjściem, które jest abstrakcją na strumień danych.
Abstrakcja powoduje, że może być tam cokolwiek: ekran terminala, plik na dysku, zasób sieciowy inny proces, drukarka, .... cokolwiek co przyjmuje strumień danych.

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