Mysql 回合制游戏数据库设计
我正在寻找一些关于使用mysql设计一个高效的基于回合的系统的指导。要求和游戏流程将类似于游戏“与朋友的话”。但以下是我头脑中对系统的要求:Mysql 回合制游戏数据库设计,mysql,ios,database,Mysql,Ios,Database,我正在寻找一些关于使用mysql设计一个高效的基于回合的系统的指导。要求和游戏流程将类似于游戏“与朋友的话”。但以下是我头脑中对系统的要求: 必须存储每次战斗的历史,以便计算战斗统计数据。目前,这只是为了确定胜负 当前的战斗状态必须始终可用(应允许用户通过选择或推送通知关闭应用程序并恢复游戏) 必须高效,并尽可能减少数据库请求。在更大的客户端基础上,每秒可能有许多请求,因此请求越少越好 一般游戏流程: 玩家选择另一个玩家和回合超时值进行战斗,然后等待确认 确认成功后,发起玩家必须轮到他们。转
- 必须存储每次战斗的历史,以便计算战斗统计数据。目前,这只是为了确定胜负
- 当前的战斗状态必须始终可用(应允许用户通过选择或推送通知关闭应用程序并恢复游戏)
- 必须高效,并尽可能减少数据库请求。在更大的客户端基础上,每秒可能有许多请求,因此请求越少越好
开始日期-日期时间
结束日期-日期时间
当前用户-int 11(不太可能耗尽这么多用户)
map-int 10(取决于您有多少个贴图或它们是否是随机的)
配子状态-。。。这一部分很大程度上取决于您计划如何将状态发送到应用程序
令牌-varchar 50(要进行身份验证的对象)
状态-tinyint 1(如果要挂起、准备就绪、关闭,请使用枚举) 行动: id-varchar 255
游戏id-varchar 255
用户id-int 11
日期时间-日期时间
动作-tinyint 1(取决于你有多少动作..枚举攻击、移动、防御等)
数据-关于所做工作的一些细节,但这些数据仅用于统计数据,不发送给其他用户 用户: id-int 11
用户名-varchar 50(例如)
等用户并不那么重要,因为id是我们唯一关心的事情 我并没有疯狂地解释每一个细节,比如unsigned、myisam和innodb等。基本的想法是有一个包含相关游戏数据的游戏表和一个动作关系表,这样你以后就可以处理你的统计数据或时间线等 这里的关键是游戏数据和令牌,因为这些是您在游戏之间来回传递的内容。理想情况下,令牌是一个哈希值,可以与每个游戏特有的应用程序内进行比较,这样用户就不能只使用浏览器或其他东西,然后发布游戏更新。这背后还有一个完整的哲学,现在可能不重要了 所以gamedata可以是一个序列化的数组、文本、blob等等。这取决于传递的数据量和格式。因此,一个非序列化的响应可能是
[0] => [ // player 1
[0] => [ // army position and status
[0] => '2,2,98,1', //x, y, health, mode (1 => defense, 2 => offense, etc)
[1] => '120,10,45,2', // could also break down into another array layer
[3] => '222,155,100,1'
],
[1] => [ // bases
[0] => '130,45,34', //x, y, health
[1] => '356,25,10'
],
[2] => [ // game data
[0] => '12245' // money
[1] => '41324131232' // timestamp of when last turn began
[2] => 0 // bool whether or not they are up at bat
]
]
这只是玩家1的数据。所以你可以序列化它,加密它,随便什么。但这正是我所说的,应该在游戏状态领域。因此,您可以使用任何适合需要的数据类型,这可能会随着游戏本身的更多信息而更加明显
您也可以查看关系选项,但在不了解游戏本身的亲密性的情况下,此基本示例适用于小型游戏
无论如何,这个答案可能并不完全是你想要的,甚至不是你想要的。但它可能比我最初发布的要好。祝你的比赛好运。制作游戏有很多乐趣,现在绝对是为ios和android做游戏的时候了。这个问题太宽泛了,不适合StackOverflow。考虑更多的概念性问题。对不起,我是新手。如果我能把它转移到gamedev,我会的。对不起,我不是要教程。更多关于如何构建数据以支持此类游戏的信息。在布局示例方面,DB表示例最多就是我想要的。我不打算运行一个实际上有队列或任何东西的服务器——它都是基于事件的,每个玩家都会根据他们的移动计算新状态并更新服务器上的数据库,然后第二个玩家会读取这个新状态,然后进行移动。好的,好的。但是,即使是一个模糊的答案,也可能需要更多地了解游戏本身。例如,是否有各种各样的地图,是随机生成的地图,它们是在网格上运行还是更像PvP,玩家是否有军队或是集体,等等。我可以尝试在猜测中更新我的答案,但我不确定它是否会有帮助。谢谢,你更新的答案与我所追求的更接近。该游戏没有地图或棋盘,更像是一个1vs1战斗般的口袋妖怪。通信是通过php/json Web服务进行的,我已经有了一个用户和身份验证/令牌系统。我的问题主要是如何表现你的新帖子非常有帮助的游戏/战斗和行动。实际上,我没有想到在数据库中存储一个类似JSON的gamedata列,而是为所需的每一项存储实际的列。不过,使用基于JSON的字段可能更高效、更灵活:)