如何解决我的蛇程序中的运动?

时间:2015-09-05 18:25:40

标签: keyboard-events

我现在正在编程一个蛇程序。我在运动中有一点问题。我的方向按钮是' W' ' A' ' S' ' d'纽扣。 我有一个 方向 变量,类型是char。我从键盘上读了一个按钮, 方向 得到一个值,如果我从WASD中击中一个然后进入,则蛇从4个方向向前迈出一步。我想修复输入问题。 我想,我的蛇不停地移动,并且不等待进入。 我想以这样的方式为 方向 制作一个计时器,如果我没有在X毫秒内击中一个角色,那么蛇继续进入 方向的最后一个值的方向

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

2 个答案:

答案 0 :(得分:0)

不幸的是,在不知道语言的情况下,如果使用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吗?

答案 1 :(得分:0)

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

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

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

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