【问题标题】:Use of kbhit() with while loop将 kbhit() 与 while 循环一起使用
【发布时间】:2014-04-11 19:03:09
【问题描述】:

这是程序。

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() 运行一个循环,直到按下一个键。 所以这里的箭头"&lt;---&gt;" 将继续向前移动,直到按下某个键或到达屏幕的最后一个像素。

我想要的是程序应该在每次按下'd' 时将 h 增加 1,并在每次按下 'a' 时减少 1。即h++;h--; 并运行另一个循环,直到按下一个字符。 这个想法更像是蛇游戏,蛇一直朝某个方向移动,直到按下一个键。请帮忙!

【问题讨论】:

  • 你用什么编译?
  • 对不起“clrscr();]”是一个错字。
  • 使用 turbo C 编译器。

标签: c while-loop turbo-c kbhit


【解决方案1】:

clrscr() 应该在 gotoxy 和 printf 之前

无论如何,我要做的是创建一个状态变量,只是为了指示蛇应该去的方向,即,如果用户按下“a”或“d”,则存储的东西。

我不会离开循环,只需使用 if(kbhit) 并获取字符。

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

【讨论】:

  • 忘记了你的屏幕边界,但你可以很容易地把它放在 while 循环中(是的,while(1) 不是很优雅)。
  • 谢谢@ThoAppelsin,你是对的。回到最初的问题,如果您打算构建一个贪吃蛇游戏,那么在添加垂直移动时会遇到困难。我认为实现蛇游戏的最佳方式是通过链表
  • 成功了。非常感谢!这正是我一直在寻找的。是的,我会放那个屏幕边界,没问题。如果用户想退出他/她拥有的所有东西,用 while (control!='q') 而不是 while (1) 看起来更有希望要做的是按'q'。再次感谢伙计!
猜你喜欢
  • 2013-07-06
  • 2017-10-09
  • 2014-01-09
  • 2020-08-25
  • 1970-01-01
  • 2011-08-06
  • 1970-01-01
  • 2014-12-20
  • 2020-10-11
相关资源
最近更新 更多