使用反应性香蕉实现游戏状态

时间:2015-10-13 16:25:17

标签: haskell reactive-programming reactive-banana

在我的突破实现中,有两个主要行为描述了 游戏的主要州:

paddlePosition :: Behavior t Point
ballPosition :: Behavior t Point

两者都是以tickEvent :: Event t ()的方式实现的 更新它们。

gameOverEvent :: Event t ()过滤所有球的滴答事件 位置在屏幕下方。

我希望尽快将paddlePosition替换为新行为 是一个gameOverEvent,将桨留在原位,用伪代码:

newPaddlePosition = \t -> case gameOverEvent of
    [] -> paddlePosition t
    ((t',()) : _) -> paddlePosition t'

第一个问题是:我如何表达newPaddlePosition使用 无功香蕉?

第二个问题是有点模糊:什么是组织的好方法 整个程序取决于游戏是否结束?还有其他 考虑因素:如何处理ballPosition,如何绘制游戏等等 上。

1 个答案:

答案 0 :(得分:1)

您可能正在寻找动态事件切换,尤其是switchB组合器。

另见this question

请注意,newPaddlePosition函数的伪代码没有多大意义:它表示当gameOverEvent从未发生时,新的paddle位置等于paddlePosition,否则它是常量并且等于事件发生时paddlePosition的值。这在因果FRP库中是不可能表达的。你可能意味着别的东西。