在我的突破实现中,有两个主要行为描述了游戏的主要状态:
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
使用 reactive-banana 进行表达?
第二个问题有点模糊:根据游戏是否结束来组织整个程序的好方法是什么?还有其他一些考虑,比如:如何处理ballPosition
,如何绘制游戏等等。