数据库设计 - 2d平铺网格

时间:2009-10-21 10:57:56

标签: mysql database-design

我曾经玩过一场名为racewarkingdoms的网页游戏。它使用了基于2d文本的系统。我感兴趣的是地图。地图由X方向的255个区块和Y方向的255个区块组成。总共有5张这样的地图。但令人惊奇的是,每个人都包含如此多的数据。每一个都有自己的'王国',每个瓷砖大约有50个变量。然后每一个都包含“怪物”,其中包含健康栏和永久记忆的数据。

如何设计这样的东西。我怀疑每块瓷砖都是一张桌子。我想你会有一个map1_table,其中包含可以在任何元素中找到的不同元素,但我不确定。我正在接近需要类似设计的情况,但不知道从哪里开始。

谢谢!

2 个答案:

答案 0 :(得分:4)

首先,我首先要定义一个这样的地图,

MAPS
Id  
Name  
Xmax  
Ymax

在这里,您可以通过为地图指定名称和最大尺寸来定义地图。您可以使用最大尺寸来约束切片。

TILES
Id
MapId
X
Y

然后构造一个tile属性表来保存与tile关联的所有属性。

TILEPROPERTIES
Id
TileId
Name
Value

这将是我的实施,并不意味着它应该适合你,但它有望让你开始。

答案 1 :(得分:2)

Click here for scheme file

我建议结合我的方案使用以下结构:

  • 瓷砖可以节省瓷砖的数量 一般来说,每个瓷砖都有一个id,即 瓷砖的大小是硬编码的:5 * 5像素 例如。

  • tiles_meta保存名称,并且a 简短的“工具提示”说明。 META是 自我解释;)

  • tiles_content_low包含少数 的瓷砖。你应该在这里 包括用户将访问的内容 很多次,但要保持最低限度。

  • tiles_content_medium包含这样的内容 事情为“这里的项目xy可以找到 有可能12%“。创建一个 另外“loot_table”与项目。该 “item_hash”是所有项ID的哈希值 可能会掉落的物品。

  • tiles_content_large是最大的 表。在这里你存储哪个 坐标里面的瓷砖 球员位于,他洗劫的地方 项目编号1234等。

table: tiles
id

table: tiles_meta
id
tile_id
name
desc

table: tiles_content_low
id
tile_id
owner_id
go_id

table: tiles_content_medium
id
tile_id
mob_hash
item_hash

table: tiles_content_large
id
tile_id
savegame

如果要构建tile_set或“map”使用JavaScript,请不要在服务器上生成整个地图,只需将tile日期传递给JavaScript即可。 这将节省很多性能。