如何在MySQL数据库中保存游戏进度

时间:2012-04-17 13:29:09

标签: mysql

我正在开发一个网站,这是一种游戏。用户的进度保存在MySQL数据库中。

我想通过使用列保存(ID)和列进度来保存表,其中progress是数据类型文本。当用户开始时,进度被设置为(例如)'0'。如果他进入第1级,则进度设置为“0#1”,第二级使其为“0#1#2”。级别的顺序是免费的,我想保存它。所以进步可能是'0#4#2#15'等等。

这是一个很好的方法吗?我没有使用SQL的经验,我不想做一些非常愚蠢的事情。我已经阅读了很多关于表格,外键等等的令人困惑的信息......

我想感谢您抽出时间阅读本文,我期待着回答。

赖安

3 个答案:

答案 0 :(得分:2)

回答你的问题1

我不会这样解决你的问题。我将创建3个表:一个Levels表('levelKey'的主键),一个Users表('userKey'的主键')和一个User_Levels表,其复合键为'levelKey'和'userKey'。当用户完成一个级别时,只需插入User_Levels表即可。然后,查看用户是否已完成某个级别是一个简单的选择:

SELECT 'a' FROM User_Levels WHERE userKey = ? AND levelKey = ?

如果行数> 0,用户已完成级别

答案 1 :(得分:2)

至于问题2,我会说查询量不是问题。毕竟,您数据到数据库,而不是访问它。就个人而言,只要用户实际完成一个级别,我就会向数据库发送“保存”。

观察者发布了一种将关卡和用户分成不同表格的好方法。从进度记录到User_Levels的顺序可以看到进度的顺序,因此不需要存储类似1#3#4#9

的内容

您可能希望使用ajax在后台发送保存,因此您不会中断游戏。例如,查看jQuery's $.post method。或者,如果您的游戏是在Flash中,则可以使用URLRequest。

答案 2 :(得分:1)

关于你的第一个问题,如果游戏/等级是非线性的,我会采取不同的方法;我只需添加一个表,其中包含用户ID的列和已完成级别的列。因此,如果用户1已完成级别0,4和7,则我的表将有3行:

UID  levels_completed
1    0
1    4
1    7

关于您的其他问题,您可以使用javascript事件和ajax来检测页面的关闭,但我不会依赖它;我会在需要时运行查询。如果你的会话被破坏了,你已经太晚了......