【发布时间】:2017-08-25 17:30:46
【问题描述】:
我正在尝试使用 Yesod 实现类似 Pachisi 的棋盘游戏。目前,Haskell 代码通过 Ajax 接收棋盘的当前状态,用它做一些事情(例如,计算一个新棋子是否可以进入棋盘,游戏是否结束等等)并将其返回为客户端可以使用的 JSON更新视图。
实际上,我在客户端中保持状态以规避 Haskell 没有可变性的问题。在其他语言中,我可能会声明一个变量 gameState 并在将其返回给客户端之前让服务器端代码对其进行修改,但在 Haskell 中......我可能完全遗漏了一些东西;当谈到 Haskell 时,我还没有经验。
我想尽可能少地做客户端,因为这应该是一个haskelling的练习。我找到了Haskell: Yesod and state,但无法真正理解它。所以问题仍然存在:有没有比我的解决方案更好的方法来处理游戏状态?
【问题讨论】:
-
是的,有更好的方法来做到这一点。例如,您可以将几乎所有客户端状态保留在数据库中,并根据客户端请求检索/更改它(获取只需要一个 ID,发布一个 ID + 变更集)。
persistent是使用Yesod执行此操作的“默认”方式,但您可以推出自己的解决方案或根据需要使用其他解决方案。