mysql - 存储游戏先决条件信息的 MYSQL 数据库模式
问题描述
游戏有5个玩家可以拥有的技能:
Skills: Run, Jump, Shoot, Fly, Sleep
玩家可以拥有所有技能,一个子集或一个都没有。玩家将拥有与每项技能相对应的值,该值会根据他们的表现而增加或减少。玩家的示例技能集如下所示:
run: 30
jump: 87
Sleep: 2
接下来,游戏有10个关卡。每个级别都有一组玩家在能够参加比赛之前需要满足的先决技能。一个级别也可能具有完成另一个级别的先决条件。
因此,例如 5 级可能具有以下先决条件:
Level 5 requires: 10 Fly, 25 Sleep, 90 Run and completion of level 1,2,3
对于我的用例(最后给出),我决定将先决条件信息存储在 MYSQL 数据库中。我可以想到两种方法来存储上述信息:
方法一:
- LEVELS 表 - 列:ID、级别名称
- SKILLS 表 - 列:ID、技能名称
- SKILL_PREREQUISITE 表 - 列:ID、LevelID、SkillID、requiredValue
- LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID
方法二:
- LEVELS 表 - 列:ID、级别名称
- LEVEL_SKILL 表 - 列:ID、QuestID、Run、Fly、Sleep、Jump、Shoot
- LEVEL_PREREQUISITE - 列:ID、LevelID、prerequisiteLevelID
我的用例如下:
考虑到玩家的技能,以及他们完成的关卡,他们有资格参加哪些关卡?
牢记这一点,方法 1、方法 2 或完全不同的方法是解决我的问题的最佳解决方案吗?如果这是前进的道路,我也愿意接受不依赖于 MYSQL 的建议!
注意:玩家信息(即:技能等级、完成等级)不在数据库中。将它们视为输入参数,将在查询中用于获取玩家的合格级别
解决方案
这取决于您的级别和技能是否固定,或者您是否计划在以后添加新的级别和/或技能(或希望至少接受这种可能性)。
在第一种情况下,我认为一个非常简单的表将提供一个很好的解决方案,假设此类问题的数字表示:
- 技能:技能 0 意味着玩家没有技能(或者如果您认为 0 是有效技能,那么 -1 可能意味着没有技能)
- 级别:0 表示未完成,1 表示已完成。
在这种情况下,先决条件表可能有 16 个属性:
LevelID, RequiredRun, RequiredJump, RequiredShoot, RequiredFly, RequiredSleep, RequiredLevel1, RequiredLevel2,...,RequiredLevel10
和十行,例如,在您的示例中对应于级别 5 的行是:
5 90 0 0 10 25 1 1 1 0 0 0 0 0 0 0
另一方面,如果您想设计一些可以在未来发展的东西,那么您的方法 1 是正确的方法。
推荐阅读
- hadoop - 蜂巢中的 NTILE() 卡在 99%
- javascript - 如何减少给定时间
- java - 使用二维数组进行深度优先搜索
- react-native - React-Native/Expo 中的加速度计问题
- react-native - 在本机反应中将图像转换为base64
- python - 避免在python中将<字符写入XML
- django - 如何在 Django-Template 中处理多个操作
- architecture - 在特定设备上开发 Linux C++ 程序
- wordpress - aws centos 7 wordpress apache重定向
- android - 从本地数据存储解析查询后出错