Другие языки программирования и технологии

Как сделать чтобы змейка продолжала путь без нажатия клавиш? C++

Как сделать чтобы при цикле когда доходит до ввода его можно было пропустить если ничего в него не ввели или что то типо того?
Например змейка:
 while (!gameover)
{
Draw();
Input(); //ввод
Logic();
}
как сделать чтобы при нажатии клавиши она направлялась в ту сторону и при нажатии в другую сторону пошла в другую сторону не останавливаясь.
AL
Aleksej Lioska
188
Чтобы змейка продолжала движение без нажатия клавиш, можно использовать алгоритм автоматического обновления направления движения каждый шаг. Также можно добавить проверку наличия ввода от пользователя перед изменением направления.

Вот пример кода на C++, который демонстрирует эту идею:

 #include  
#include // Для функции _getch() в Windows

enum Direction { UP, DOWN, LEFT, RIGHT };

int main() {
bool gameover = false;
Direction direction = RIGHT;

while (!gameover) {
// Draw();
// Логика отрисовки змейки

// Input
if (_kbhit()) {
char input = _getch();
switch (input) {
case 'w':
if (direction != DOWN)
direction = UP;
break;
case 's':
if (direction != UP)
direction = DOWN;
break;
case 'a':
if (direction != RIGHT)
direction = LEFT;
break;
case 'd':
if (direction != LEFT)
direction = RIGHT;
break;
// Другие обработки ввода, если необходимо
}
}

// Logic();
// Логика обновления позиции змейки

// Пример автоматического движения
switch (direction) {
case UP:
// Обновить позицию змейки вверх
break;
case DOWN:
// Обновить позицию змейки вниз
break;
case LEFT:
// Обновить позицию змейки влево
break;
case RIGHT:
// Обновить позицию змейки вправо
break;
}

// Добавьте здесь задержку времени, если требуется ограничить скорость движения змейки
}

return 0;
}
Руслан Стамгалиев
Руслан Стамгалиев
966
Лучший ответ
Aleksej Lioska Никак не могу понять почему char input = _getch(); не просит значение каждый раз. Оно же должно останавливаться по идеи.
Тогда почему аналогичная тестовая запись так не работает, хотя все записано примерно так же
 enum dir 
{
A = 1, B = 2
};

int main()
{
dir t = A;
while (true)
{
char input = _getch();
switch (input)
{
case 'a':
t = A;
break;
case 's':
t = B;
break;
}
cout
Нужно завести переменную для направления движения. Движение должно происходить в любом случае. А при нажатии на клавишу только изменяться его направление. Язык реализации при этом не важен.
U K
U K
5 762

Похожие вопросы