Использование kbhit() с циклом while

Вот программа.

void main( )
{
    int h, v;
    h = 1; v = 10;
    while ( !kbhit( ) || h <= 80 )
    {
        gotoxy( h, v );
        printf( "<--->" );
        delay( 200 );
        clrscr( );
        h = h + 1;
    }
    getch( );
}

Я делаю программу на C, в которой я использовал kbhit() запустить цикл, пока не будет нажата клавиша. так вот стрелка "<--->" будет продолжать двигаться вперед до тех пор, пока не будет нажата клавиша или пока она не достигнет последнего пикселя экрана.

Я хочу, чтобы программа каждый раз увеличивала h на 1 'd' нажимается и уменьшается на 1 каждый раз 'a' нажата. т.е. h++; а также h--;и запустить еще один цикл, пока символ не будет нажата. Идея больше похожа на игру "Змея", в которой змея продолжает двигаться в определенном направлении, пока не будет нажата клавиша. Помогите, пожалуйста!

1 ответ

Решение

clrscr() должен предшествовать gotoxy и printf

В любом случае, я бы создал переменную состояния, просто чтобы указать направление, в котором должна двигаться змея, то есть что-то, что хранит, если пользователь нажал "a" или "d".

И я бы не стал выходить из цикла, просто использовал if(kbhit) и получил бы char.

int direction = 1; char control;
while (1)
{
    if(kbhit()){
       control = getch();
       switch (control){
              case 'a': direction = -1; break;
              case 'd': direction = +1; break;
              default: break;
       }
    }
    clrscr( );
    gotoxy( h, v );
    printf( "<--->" );
    delay( 200 );
    h = h + direction;
}
Другие вопросы по тегам