在SQL中存储游戏地图

时间:2014-05-06 17:51:02

标签: mysql sql database

地图将基于图块,并具有以下两个主要数据存储要求

  • ' walkable'瓷砖(这可以用0s和1s的单个字符串表示,对应于NxN瓷砖?)
  • 映射到这些NxN磁贴的图像路径列表

我的noobie想法

  • 每个"地图"是地图表格中的一行。
  • ' walkable' tile可以存储为单个字符串。我已经知道这通常被建议反对,但不知道更好的方法来表示这一点,因为这些值只能是两个值中的一个。
  • 我不确定如何存储与图块关联的NxN图像路径字符串。

对SQL和数据存储架构一般缺乏经验,所以我想学习如何设置此方案的建议。

2 个答案:

答案 0 :(得分:3)

从广义上讲,我会像这样解决这个问题:

Tiles
  Tile_ID
  Tile_Name(?)
  Walkable
  Image_Path

Maps
  Map_ID
  Map_Name

Map_Tiles
  Map_ID
  Tile_ID
  X_Coordinate
  Y_Coordinate
  Orientation
  Walkable(?)

根据关系设计原则,你不想做的事情:

  • 强制将多个数据元素(切片)强制为单行(即不要 将所有地图的图块放在一行中)。
  • 使用多个数据元素重载单个字段(即不要将所有地图的图块放入单个字段中)。

答案 1 :(得分:1)

如果我猜错了以下内容:

  • 应用程序磁贴的重要数据可以存储在字符串中
  • 你有几张地图,可以重复使用瓷砖
  • 每个地图都以某种顺序在瓷砖之间建立连接(简化为像Tile 217的北边194,南边217)。那些“方向”可以被视为一些小的整体可能列表,如(北,东北,东......,南,上,下,特别1,特殊2)?

然后我会找一张桌子maps,一张桌子tiles和一张桌子connections。在map {} {}}中存储地图,在tiles瓷砖及其整体属性中存储,并存储在connections中:

CREATE TABLE connection 
(  id int(11) not null auto_increment primary key, 
   at_tile int(11), //reference to the tile where you come from
   direction enum('N','NE','UP',"SP1","SP5), // and so on
   to_tile int(11)
)

并在系统增长时添加一些索引。