Snake złe rysowanie mapy.

0

Witam napisałem coś takiego,ale mam problem bo jak głowa się rusza to po prawej stronie robi się dodatkowa ramka dodatkowo jak głowa leci w góre to program kończy się nie na zerze czyli na ramce a na 2.W lewo to samo.

 #include <iostream>
#include <conio.h>
#include <windows.h>
#include <ctime>;
#include <cstdlib>
#define hight 20
#define width 20


using namespace std;

void map(int &x, int &y, int &jx, int &jy, int &score);
void gotoxy(int x, int y);
void przycisk(int &x, int &y);
void logika(int &x, int &y, int &jx, int &jy, bool &gameover, int &score);
enum ruch{stop=0,przod,tyl,prawo,lewo};
ruch kierunek;

int main()
{
	srand(time(NULL));
	int jx = rand() % 20 + 1;
	int jy = rand() % 20 + 1;
	int x = width/2;
	int y = hight/2;
	int score = 0;
	bool gameover = false;
	bool restart = false;
	cout << "Witaj w grze snake!" << endl;
	cout << "Ruch w gore- 'W'" << endl;
	cout << "Ruch w dol- 'S' " << endl;
	cout << "Ruch w lewo- 'A" << endl;
	cout << "Ruch w prawo- 'D'" << endl;

	cout << "Wcisnij dowolny przycisk aby zaczac gre";
	_getch();
	system("cls");
		while (!gameover)
		{
			map(x, y, jx, jy,score);
			gotoxy(0, 0);
			przycisk(x, y);
			logika(x, y, jx, jy, gameover,score);
			Sleep(20);
		}
		
	getchar();

}

void map(int &x, int &y, int &jx, int &jy, int &score)
{
	for (int i = 0; i < width; ++i)
	{
		cout << "#";
	}
	cout << endl;
	for (int i = 0; i < hight-2; ++i)
	{
		cout << "#";
		for (int j = 0; j < width-2; ++j)
		{
			cout << " ";
			if ((i == y) && (j == x))
			{
				cout << 'O';
			}
			if ((i == jy) && (j == jx))
			{
				cout << 'X';
			}
		}
		cout << "#" << endl;
	}

	for (int i = 0; i < width; ++i)
	{
		cout << "#";

	}
	cout << endl;
	cout << "Wynik: " << score;
}

void gotoxy(int x, int y)
{
	static HANDLE h = NULL;
	if (!h)
		h = GetStdHandle(STD_OUTPUT_HANDLE);
	COORD c = { x, y };
	SetConsoleCursorPosition(h, c);
}

void przycisk(int &x, int &y)
{
	if (_kbhit()) {
		switch (_getch())
		{
		case 'a':
			kierunek = lewo;
			break;
		case 'd':
			kierunek = prawo;
			break;
		case'w':
			kierunek = przod;
			break;
		case 's':
			kierunek = tyl;
			break;
		default:
			break;



		}
	}
}
void logika(int &x, int &y, int &jx, int &jy, bool &gameover, int &score)
{

	switch (kierunek)
	{
	case lewo:
		--x;
		break;
	case prawo:
		++x;
		break;
	case przod:
		--y;
		break;
	case tyl:
		++y;
		break;
	default:
		break;
	}
	if ((x == width) || (x == 0) || (y == hight) || (y == 0))
	{
		gameover = true;
	}
	if ((x == jx) && (y ==jy))
	{
		score = score + 10;
		jx = rand() % 19 + 1;
		jy = rand() % 19 + 1;
	}
}

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