Как я могу сделать вашу программу несколько раз, пока другая клавиша не будет нажата в операторе switch

Я работал над одной из этих игр со змеями, и у меня есть оператор переключения, который говорит, что если нажата клавиша, чтобы переместить змею в направлении, увеличивая / уменьшая ее, но это будет сделано только в том случае, если я удержу ее. Я ищу способ увеличения местоположения змей без удержания пользователем этой клавиши. Я поставил один случай ниже

if(_kbhit()) {
switch(_getch()) {
case 'a' :
dir = LEFT;
x--;

1

Решение

Я ищу способ иметь … продолжать наращивать без пользователя
держа этот ключ. «

ИМХО, вы должны рассмотреть функцию «select ()» (если она доступна в вашей ОС)


Давным-давно я использовал «select ()» в vxWorks. На странице руководства я вижу, что эта функция также доступна для Ubuntu Linux. (может быть, это доступно для вашей системы?)

С помощью оператора select поток или программа могут «отслеживать несколько файловых дескрипторов, ожидая, пока один или несколько файловых дескрипторов станут« готовыми »для некоторого класса операций ввода-вывода (например, возможен ввод). Дескриптор файла считается готовым, если». можно выполнить соответствующую операцию (например, read () без блокировки или достаточно маленькую запись ()). » (со страницы руководства)

На практике в системе, над которой я работал, поток чтения пользовательского интерфейса (один из нескольких) выдавал и контролировал ввод fd (через select) для ввода данных пользователем. Наш выбор использовал время ожидания 1/2 секунды (вы выбираете скорость). Таким образом, каждые полсекунды, если на этом порту (т.е. устройстве) не было введено никакого пользовательского ввода, тайм-аут высвобождает программу для проверки битов в fd_sets.

Ничто не мешает коду выполнять дополнительные действия в течение времени ожидания.

Я предполагаю, что вам нужно будет работать только с readfds, а остальные можно оставить пустыми.

Другими словами, с помощью select ваш код «отслеживает» некоторый пользовательский ввод по истечении времени ожидания и выполняет действия либо по пользовательскому вводу (нажатие клавиши), либо по истечении времени ожидания.

Это звучит как то, что вы ищете — действие без нажатия клавиши.

0

Другие решения

Ваш текущий дизайн звучит так, как будто он двигает змею на прессе.

Я думаю, что вы хотите изменить дизайн так, чтобы события нажатия обновляли некоторый флаг текущего направления, в то время как некоторый фоновый поток таймера перемещает змею с некоторой регулярной частотой кадров.

0

Ваш код только перемещает змею при нажатии клавиши. Вам нужно реализовать какой-то игровой цикл, который перемещает змею с регулярным интервалом на основе direction переменная. Затем вы можете изменить код нажатия клавиши, чтобы просто обновить direction,

Псевдокод:

while: # loop forever
# below could be your switch statement
if direction == 0: # north
y--
if direction == 1: # east
x++
if direction == 2: # south
y++
if direction == 4: # west
x--

if _kbhit():
if _getch() == 'a':
direction == 4 # west
# etc...
0
По вопросам рекламы [email protected]