如何在OCaml中等待程序?

时间:2019-03-08 17:25:43

标签: unix ocaml sleep

我正在尝试用ocaml制作俄罗斯方块游戏,我需要以一定的速度在图形屏幕上移动一段。 我认为最好的方法是创建一个递归函数,将其绘制在屏幕顶部,等待半秒钟左右,从屏幕上清除该块,然后再将其绘制低50像素。我只是不知道如何让程序等待。我认为您可以使用Unix模块来完成此操作,但idk可以。.

1 个答案:

答案 0 :(得分:1)

假设您要采用一种相当简单的方法,即一种无需多线程即可工作的方法。

大概在您的游戏正在运行时,它实际上花费了所有时间来等待用户的输入,即等待用户按下按键。实际上,很可能您正在使用阻塞读取来执行此操作。由于用户在输入任何内容之前可能会花费任何时间(最多数分钟或数年),因此这与使游戏的图形部分保持最新是不兼容的。

然后一个非常简单的解决方案是使读取操作超时。您可以等待(例如)最多10毫秒,而不是无限期地等待用户按下键。

为此,您可以使用Unix.select函数。最简单的方法是切换到使用Unix文件描述符作为输入而不是OCaml通道。如果您不知道如何进行这项工作,则可能会遇到一个更具体的问题回到StackOverflow。