在C中制作蛇,但我的蛇只在每次按下一个键时移动(我想要连续移动)

hk8txs48  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(160)

我正在用c语言制作经典的蛇游戏。我的程序运行得很好,除了在控制蛇的时候,它只在按住w/a/s/d的时候才移动。对于那些没有玩过蛇的人来说,蛇应该一直向前移动,而w/a/s/d只是改变了蛇面对的方向。
下面是负责移动snake的方法的代码:让我知道如果你有任何问题,或者如果你需要看到我的任何一个代码来帮助,谢谢!PS.使用WSL,并使用gcc作为编译器

void snake()                        
{                           
makeFood();                     
pos head = { 10, 10 };                              
queue(head);                        
while( 1 )                      
    {                           
        int in = getch( );              
        if( in != ERR )                 
            key = in;                   
        switch( key )                   
        {                       
            
            case 'W':                   
            case 'w':                   
                head.y--;               
                break;
                
            case 'A':                   
            case 'a':                   
                head.x--;               
                break;
                                    
            case 'S':                   
            case 's':                   
                head.y++;               
                break;                  
                                    
            case 'D':                   
            case 'd':                   
                head.x++;               
                break;                  
                                    
                                
            case 'Q':                   
            case 'q':                   
                showMenu();             
                break;                  
                            
        }                       
        if( !inPlay( head ) )                  
            gameOver( );                
        else                        
            moveSnake( head );              
    }                           
    gameOver( );                    
}
tzdcorbm

tzdcorbm1#

强调:假设OP正在寻找Unix/Posix解决方案- Linux、WSL......如果正在寻找仅限Windows的解决方案,则回答不相关。同样适用于curse。
有两个项目需要处理,都与针对终端输入运行getch有关。

  • 默认情况下,tty的输入是面向行的。这意味着在用户点击“enter”之前,数据对你的程序是不可用的。stty -icanon将解决这个问题。
  • “getch”将使用“blocking read”,这意味着如果没有输入,程序将为下一个字符阻塞。stty -time 1可以限制时间(精度为1/10秒)。
  • 标准终端驱动程序将回显输入字符。假设程序生成一些图形输出,最好禁用回显。stty -echo

如果你的输入直接来自终端,你可以使用stty来改变终端的行为。记住,当你的程序退出时,重置设置,否则,它们将继续执行其他与终端交互的命令

( stty -icanon -echo min 0 time 1 ; myprog )

如果您使用ioctl和详细信息中提供的TCGETS和TCSETS -man tty_ioctl,则可以通过编程实现'stty'的效果。

jhkqcmku

jhkqcmku2#

我能够通过使用halfdelay()函数解决我的问题

相关问题