如何表示GAE浏览器游戏的棋盘/地图数据?

时间:2011-12-20 11:06:55

标签: java google-app-engine collections

作为一个学校项目,我正在使用Java为Google App Engine平台创建一个浏览器游戏。它是一个战略游戏,玩家在基于拼块的棋盘上互相争斗。

我希望匹配和棋盘结构是动态的。每个比赛的板尺寸是不同的(在创建比赛时选择),玩家可以在比赛中间加入或离开,每个棋盘可以包含多个不同的对象(玩家的棋子,奖金等)并且对象可以在瓷砖之间移动。

问题在于我是Java的新手,我不确定如何表示和存储这样的多级动态结构。

1)从概念上讲,它看起来像是“对象列表的2D数组”,但它应该如何用Java语言定义?它是“对象列表列表”还是“对象列表的二维数组列表”,甚至可能是其他东西?

2)该结构的哪一部分应该存储在数据存储区(GAE的面向对象数据库)中,哪些部分应该在向玩家显示板时动态构建? 我存储的越多,显示电路板就越容易,但另一方面,当对象移动时更新会更加痛苦。

1 个答案:

答案 0 :(得分:1)

我建议你将它存储为具有2d坐标的独立地图条目列表。

类似的东西:

class Map {
  Long id
}

class MapEntry {
  Long id

  Long mapId  //better to use Key for parent map

  int x
  int y
  MapEntryType type //if you have different elements of map

  //some other fields / payload
}

并且,通过查询所有地图元素,通过select MapEntry where map = ?之类的查询(取决于您正在使用的数据库映射工具),您可以获取所有地图详细信息,并在服务器或客户端的内存中构建它。我敢肯定,在大多数情况下,您不需要将整个地图加载到内存中。