我正在嘗試與Yesod一起實施Pachisi式桌面遊戲。目前,Haskell代碼通過Ajax接收板子的當前狀態,做一些事情(例如計算一塊新板塊是否可以進入板子,遊戲是否結束等等)並將其作爲客戶端可以使用的JSON返回更新視圖。在Yesod中保持狀態
實際上,我在客戶端保持狀態以規避Haskell沒有可變性的問題。在其他語言中,我可能會聲明變量gameState
,並在服務器端代碼將其返回給客戶端之前對其進行修改,但在Haskell中...我可能完全缺少某些東西;在Haskell方面,我的經驗很少。
我想盡可能少地做客戶端,因爲這應該是一個哈克練習。我找到了Haskell: Yesod and state,但無法真正理解它。所以問題依然存在:有沒有比我的解決方案更好的處理遊戲狀態的方法?
是的,有更好的方法來做到這一點。例如,您可以保留數據庫中幾乎所有的客戶端狀態,並根據客戶端請求檢索/更改它(獲取只需要一個ID,發佈ID +更改集)。 ['persistent'](https://www.yesodweb.com/book/persistent)是通過'Yesod'實現此功能的「默認」方式,但如果您願意,您可以推出自己的解決方案或使用其他方法。 – Cubic