我正在制作一款游戏。游戏由一个无限平面组成。单位必须处于离散的方格上,因此它们可以用简单的
Location { x :: Int, y :: Int }
来定位。
可能会有许多种 Unit
。有些可能是生物,有些只是物品,比如一块石头或木头(想象一下2D版的Minecraft)。许多都是空的(只是草或其他东西)。
在Haskell中,你会如何建模?我考虑了以下方案,但是对于对象和生物怎么办?它们可能具有不同的字段?将它们全部规范化为Unit吗?data Unit = Unit { x :: Int, y :: Int, type :: String, ... many shared properties... }
我也考虑了添加一个“位置类型”
data Location = Location { x :: Int, y :: Int, unit :: Unit }
-- or this
data Location = Location { x :: Int, y :: Int }
data Unit = Unit { unitFields... , location :: Location }
你有什么想法吗?在面向对象的语言中,我可能会让Location
或Unit
继承另一个,并使每个具体类型的Unit相互继承。
另一个考虑因素是将发送大量这些对象到网络上,所以我需要将它们序列化为JSON以供客户端使用,并且不想编写大量的解析样板。
Data.Map.Map
作为您的网格。 - Thomas Eding