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;
}
}