基于回合制游戏的数据库设计

时间:2012-01-19 23:04:02

标签: mysql ios database

我正在寻找有关使用mysql设计高效回合制系统的一些指导。要求和游戏流程类似于游戏" Words with Friends"。但是这个系统的要求不在我的头顶:

  • 必须存储每场战斗的历史记录,以便计算战斗统计数据。目前,这只是用于确定赢/输计数。

  • 当前的战斗状态必须始终可用(应允许用户关闭应用并通过选择或推送通知继续播放)。

  • 必须高效且拥有尽可能少的数据库请求。可能每秒会有很多请求,客户群越大,请求越少越好!

一般游戏流程:

  1. 玩家选择另一名参加战斗的玩家和一个转弯超时值,然后等待确认。
  2. 确认成功后,初学者必须轮到他们。转弯只是意味着选择攻击/移动来做。
  3. 造成的伤害等由玩家轮流转移并传播到数据库来计算。然后发送推送通知以通知其他玩家轮到他们。
  4. 重复过程,直到满足胜利条件(最有可能是特定玩家的生命值达到一定水平或者轮到他们的时间)。
  5. 有人可以建议将这种方法有效地纳入数据库吗?

1 个答案:

答案 0 :(得分:2)

游戏:

id - varchar 255(如果您的游戏很大,则int 11自动增量可能会耗尽)
start_date - 日期时间
end_date - datetime
current_user - int 11(不太可能会耗尽这么多用户)
map - int 10(取决于你有多少张地图或者它们是否是随机的)
gamestate - ...这部分很大程度上取决于你计划如何将状态发送到你的应用程序
token - varchar 50(要进行身份验证的内容)
status - tinyint 1(如果你想要挂起,准备好,关闭,则为enum)

动作:

id - varchar 255
game_id - varchar 255
user_id - int 11
datetime - datetime
动作 - tinyint 1(取决于你有多少动作......枚举攻击,移动,防守等)
数据 - 有关已完成内容的一些详细信息,但此数据仅用于统计信息,而不是发送给其他用户

用户:

id - int 11
username - varchar 50(例如)
等等...用户不那么重要,因为id是我们唯一关心的事情

我没有疯狂地解释每个细节,如unsigned,myisam vs innodb等。基本的想法是在游戏桌中包含相关的游戏数据和动作关系表,以便您可以处理您的统计数据或时间表等后面。

这里的关键是gamedata和token,因为那些是你在游戏之间来回传递的东西。理想情况下,令牌是在每个游戏中唯一的应用程序中进行比较的哈希值,因此用户不能仅使用浏览器或其他内容并将更新发布到游戏中。这背后还有一个完整的其他哲学,现在可能并不重要。

所以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做的时候了。