Salve a tutti,
sto provando a codificare snake in c++ (più per esercizio che per altro).
Questo è il codice che ho scritto finora.
Il problema consiste nel fatto che il movimento non è coerente con i tasti premuti.
In particolare:
se premo "a" non succede nulla (e dovrebbe ridurre la x di 1)
se premo "w" si ottiene x++ (ed invece dovrebbe essere y--)
se premo "d" si ottiene x++ e y++ (ed invece dovrebbe essere solo x++)
se premo "s" miracolosamente fa quello che deve fare: y++.
Qualcuno può spiegarmi perchè non funziona?
sto provando a codificare snake in c++ (più per esercizio che per altro).
Questo è il codice che ho scritto finora.
C++:
#include <iostream>
using namespace std;
#include <cstdlib>
#include <windows.h>
#include <conio.h>
const int WIDTH = 50;
const int HEIGHT = 20;
int x=15, y = 15;
int foodX=15, foodY=15;
int dir;
void Board()
{
for (int j = 0; j < HEIGHT; j++)
{
for (int i = 0; i < WIDTH; i++)
{
if (i == 0 || i == WIDTH - 1 || j == 0 || j == HEIGHT - 1)
{
cout << "#";
}
else if (i == x && j == y)
cout << "O";
else if (i == foodX && j == foodY)
cout << "X";
else cout << " ";
}
cout << endl;
}
}
void input()
{
if (_kbhit())
{
//0 = sinistra 1 = sopra 2 = destra 3 = sotto
switch (_getch())
{
case 'a':
dir = 0;
break;
case 'w':
dir = 1;
break;
case 'd':
dir = 2;
break;
case 's':
dir = 3;
break;
}
switch (dir)
{
case 0:
x--;
case 1:
y--;
case 2:
x++;
case 3:
y++;
}
}
}
int main()
{
while(true)
{
Board();
input();
cout << "x= " << x << " " << "y=" << y << " " << "dir = " << dir;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), {0, 0});
}
}
Il problema consiste nel fatto che il movimento non è coerente con i tasti premuti.
In particolare:
se premo "a" non succede nulla (e dovrebbe ridurre la x di 1)
se premo "w" si ottiene x++ (ed invece dovrebbe essere y--)
se premo "d" si ottiene x++ e y++ (ed invece dovrebbe essere solo x++)
se premo "s" miracolosamente fa quello che deve fare: y++.
Qualcuno può spiegarmi perchè non funziona?