如何修复我的蛇程序中的运动?

Posted

技术标签:

【中文标题】如何修复我的蛇程序中的运动?【英文标题】:How to fix movement in my snake program? 【发布时间】:2015-09-05 18:25:40 【问题描述】:

我现在正在编写一个蛇形程序。我的运动有点问题。我的方向按钮是“W”“A”“S”“D”按钮。 我有一个 direction 变量,它的类型是 char。我从键盘上读取了一个按钮,direction 得到一个值,如果我从 WASD 击中一个然后进入,则蛇会从 4 个方向迈出一步。我想解决输入问题。 我想要,我的蛇不断移动,而不是等待进入。 我想为 direction 做一个计时器,如果我没有在 X 毫秒内击中一个角色,那么蛇会继续向方向的最后一个值。

如何制作这个计时器?还是有其他想法?

【问题讨论】:

什么编程语言?并请发布您问题的可重现示例代码。 ***.com/help/how-to-ask 回显@lxg,到目前为止你有什么代码?如果不从头开始编写整个程序并发布它,我不知道如何回答这个问题,这是很多工作。 在我看来,你在正确的轨道上,不过,与计时器的想法。我不是游戏开发者,但我听说过类似的计时器。 我是用 C++ 写的。 【参考方案1】:

这取决于您使用的编程语言:-)。 例如。如果您有可用的sleep()delay() 函数,则不需要任何特殊的计时器,一个简单的无限循环就可以完成这项工作。

重要的是您如何阅读键盘。您可以在按钮被按下时读取(非阻塞)或等待它们被按下(阻塞)。在您的情况下,您正在阅读整行 - 这就是它等待输入的原因。

不确定你的编程语言是什么,但这个伪代码可以解释一下。 keyPressed()readKey() 是一些虚构的库函数,您需要在您的语言中找到它们。

while (true) 
    if (keyPressed()) 
      direction = readKey();
    
    move(direction);
    sleep(1);

【讨论】:

我正在用 C++ 编程。 :) 你见过this question/answers吗? 感谢您的回答。我理解伪。但是如果按下某个键,我如何检查 C++?【参考方案2】:

不幸的是,在不了解语言的情况下,如果使用了 SDL、XNA、Monogame 等 SDK,我们将无能为力。我建议尝试搜索处理键盘事件。在 XNA 中,当游戏运行时,它会调用 Draw、Update 和 Event。通常键盘事件会这样处理:

    //...
    public void Update()
    
        if(Keyboard.GetStates().IsKeyDown(Keys.W))
        
            Player.ChangeDirection(Direction.UP);
        
        //...
        Player.Move();
    

Player.ChangeDirection(Direction) 可能会改变蛇的移动方式。每次移动都是在 Player.Move() 命令中完成的。

编辑:在 C++ 中,您使用的是 SDL、Allegro、DirectX 等 SDK 吗?

【讨论】:

不,它只是一个简单的控制台应用程序。我的蛇是一个队列。它在 10x10 矩阵中移动。

以上是关于如何修复我的蛇程序中的运动?的主要内容,如果未能解决你的问题,请参考以下文章

在 jhipster 项目中将实体属性骆驼案例转换为 json 中的蛇案例

如何在我的蛇游戏中为我的蛇的身体部位使用不同的图像? (Python、Pygame、Snake)

如何修复我的反应应用程序中的使用位置错误?

Python之禅中的几句话--传说中的蛇宗总纲

画布游戏:我的蛇吃自己

如何修复 react 和 spring web 应用程序中的 cors 错误?