mysql - 回合制游戏的数据库设计

标签 mysql ios database

<分区>

我正在寻找一些关于使用 mysql 设计高效的基于回合的系统的指导。要求和游戏流程类似于游戏“Words with Friends”。但这里是我脑海中系统的要求:

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

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

  • 必须高效并尽可能减少数据库请求。对于更大的客户群,每秒可能会有很多请求,因此请求越少越好!

一般游戏流程:

  1. 玩家选择另一名玩家进行战斗和回合超时值,然后等待确认。
  2. 确认成功后,发起玩家必须轮到他们。转弯只是意味着选择要执行的攻击/移动。
  3. 造成的伤害等由轮到玩家计算并传播到数据库。然后发送推送通知以通知其他玩家轮到他们了。
  4. 重复该过程,直到满足获胜条件(很可能是当特定玩家的健康状况达到特定水平或他们的回合超时时)。

谁能建议将其有效地合并到数据库中的方法?

最佳答案

游戏:

id - varchar 255(如果您的游戏很大,int 11 自动递增可能会用完)
开始日期 - 日期时间
结束日期 - 日期时间
current_user - int 11(你不太可能耗尽这么多用户)
map - int 10(取决于你有多少张 map 或者它们是否随机)
gamestate - ...这部分在很大程度上取决于您计划如何将状态发送到您的应用程序
token - varchar 50(用于验证的东西)
status - tinyint 1(或者枚举,如果你想挂起,就绪,关闭)

Action :

id - varchar 255
游戏 ID - varchar 255
user_id - 整数 11
日期时间 - 日期时间
action - tinyint 1(取决于你有多少 Action ..枚举攻击、移动、防御等)
数据 - 有关已完成操作的一些详细信息,但此数据仅用于统计,不会发送给其他用户

用户:

id - 整数 11
用户名 - varchar 50(例如)
等等...用户不是那么重要,因为 id 是我们在这里唯一关心的事情

我并没有疯狂解释每个细节,比如 unsigned、myisam vs innodb 等。基本的想法是有一个包含相关游戏数据的游戏表和一个 Action 关系表,这样你就可以处理你的统计数据或时间线等稍后。

这里的关键是游戏数据和 token ,因为它们是您在游戏之间来回传递的内容。理想情况下, 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 的数据。所以你可以序列化它,加密它,无论如何。但这就是我所说的应该在 gamestate 领域。因此,您可以使用适合需要的任何数据类型,这在游戏本身的更多信息中可能会更加明显。

您也可以查看相关选项,但在不知道游戏本身的亲密度的情况下,这个基本示例适合小型游戏。

总之,这个答案可能不是你想要的,甚至离你还差得很远。但它可能比我最初发布的要好。不过祝你游戏好运。制作游戏有很多乐趣,现在绝对是为 ios 和 android 制作游戏的时候了。

关于mysql - 回合制游戏的数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8934681/

相关文章:

php - ZF2 分页不适用于 Union

php mysql 和 memcached

ios - CFBundleURLIconFile key 在 iOS 中是否有任何用途?

ios - iTunes Connect - 授权错误

ios - boundingRectWithSize 不考虑自动换行

python - 时间戳值改变 Django

mysql - 通过 WebServer 使用 UISearchBar 进行搜索

sql - 使用多个模式进行查询 - Dbeaver

python - 值错误 : Unable to configure filter 'require_debug_false' : Cannot resolve 'django.utils.log.RequireDebugFalse' : No module named RequireDebugFalse

android - 如何从android中的数据库中检索数据在SqliteBrowser上创建数据库