如何修复我的蛇程序中的运动?
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 中的蛇案例