【发布时间】:2021-07-01 10:56:54
【问题描述】:
我想知道如何以功能方式将游戏与不断变化的状态联系起来。我的意思是游戏逻辑是根据所选动作获取当前状态并返回新状态的函数。这一切都很好,但它从定义上暗示状态转换以离散的方式。例如,在俄罗斯方块中没有状态,而砖是半尾向下。因此,如果想要对过渡进行动画处理,那么如何确定实际发生了什么是一个问题。让我们将状态视为包含 n 个敌人位置的二维数组。如果最初在位置 (10,10) 和 (15,20) 上有两个敌人,则没有单一的解决方案它们如何过渡到 (12,13) 和 (16,11)。我们只是不知道哪个是哪个。给定两种状态,我无法确定是从 (10,10) 移到 (15,20) 还是移到 (16,11)。
我想到的第一个解决方案是给每个敌人一个 id。但就我而言,我只对他们的位置感兴趣,这让我的内部状态变得复杂,只是为了允许动画过渡。
第二种方法是不仅返回新状态,还返回实际发生的事件列表。然后有了这样的事件,很容易为过渡设置动画。这里的事件类似于EnemyMoved(oldPosition, newPosition)。这个解决方案似乎也不是一个优雅的解决方案。域 API 会变得有点可笑。新状态是此类事件的确切结果,因此将它们一起返回没有多大意义。我考虑过以一种方式分离,即域逻辑只发出事件,而状态是通过在外部处理此类事件来构建的。但是很难想象如何在函数式编程方法中实现这种行为。我们甚至可以假设状态会同步更改 - 不会同时执行两个操作。
我使用 Scala,但我认为这是一个更普遍的问题。我将不胜感激任何建议、搜索条件、链接等:)
【问题讨论】:
标签: scala functional-programming game-development