我正在用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( );
}
2条答案
按热度按时间tzdcorbm1#
强调:假设OP正在寻找Unix/Posix解决方案- Linux、WSL......如果正在寻找仅限Windows的解决方案,则回答不相关。同样适用于curse。
有两个项目需要处理,都与针对终端输入运行getch有关。
stty -icanon
将解决这个问题。stty -time 1
可以限制时间(精度为1/10秒)。stty -echo
如果你的输入直接来自终端,你可以使用stty来改变终端的行为。记住,当你的程序退出时,重置设置,否则,它们将继续执行其他与终端交互的命令
如果您使用ioctl和详细信息中提供的TCGETS和TCSETS -
man tty_ioctl
,则可以通过编程实现'stty'的效果。jhkqcmku2#
我能够通过使用
halfdelay()
函数解决我的问题