代码之家  ›  专栏  ›  技术社区  ›  Prix Winteroo

我该如何处理游戏中的牌分配?

  •  0
  • Prix Winteroo  · 技术社区  · 15 年前

    我已经检查了大部分的问题,是关于我的标题显示,但他们没有关系,我正在寻找什么,所以我开始我自己的问题。

    我正在尝试重新创建一个在线游戏的游戏叫做 Buraco 不知道你们大多数人是否知道。

    我已经具备了游戏的基本功能,如:

    • 分发卡片

    我现在所困惑的是,我应该如何处理分配给A、B、C、D玩家的牌,留在牌堆上的牌,垃圾箱上的牌,以及如果有4个玩家玩的话,两队都会放在桌上的牌,如果有2个玩家玩的话,每个玩家都会放在桌上的牌。

    考虑到我不希望任何球员作弊的游戏,我将不得不保存在一个数据库中,所以我认为我应该如何创建我的MySQL表,以适应这个分配卡?

    我想到的第一件事是创建一个表,将游戏会话和所有卡片作为一个列,但是嘿,共104张卡片列???可能还有很多其他更好的方法来实现这一点。

    然后我想到,我可以使用varchar或文本来保存所有给定的卡,这将使验证已经交给我的每一张卡变得更加困难,仍然在甲板上,或者在垃圾箱上,或者在桌子上。


    所以我想我的问题是:

    1. 考虑到它将是多人游戏(用户创建一个房间来服务2或4个玩家),什么数据库将是我在这个游戏中的最佳选择?

    2. 您如何使用MySQL或其他数据库来维护每个游戏的表?

    3. 根据您喜欢使用的数据库结构,您将如何比较卡片(查询示例)?

    附言:如果你对这个话题有更好的标题,让我知道这是我当时想到的。

    1 回复  |  直到 8 年前
        1
  •  1
  •   AJ.    15 年前

    这只是一个部分的答案,但是对于第2个(表结构)来说,将其分解并考虑所有的游戏资产都是卡。

    创建一个表,其中包含游戏列、卡、卡的值(如果适用)、当前所有者(表示特定玩家、堆栈或弃牌堆的值)。为了管理已形成的集合,创建两个附加表:一个用于组或牌集,另一个用于显示游戏中牌对给定组的成员身份的链接表(这也可以通过基表中的字符串列和一些逻辑来实现,但对于纯rdbms方法,可以拆分表)。

    编辑:

    问题1-数据库选项

    问题2-表格配置

    为了扩展我以前的评论,我建议如下(请随意修改表名-它们只是为了解释):

    • game_cards 带列的表( game_id , card_id , value , owner )
    • game_sets 带的表格( set_id , 游戏id , 主人
    • card_set_membership 带的表格( 设置\u id , 卡号 )

    这个 游戏卡 (不管你有多少张牌,这是你添加到表中的行数)。所有卡片都应使用 卡号 ,其中每一张代表 ,对于给定的游戏,所有的 (因为他们是同一个游戏的一部分)。

    • game_cards.value 列将代表该卡固有的点数,如果适用于您的游戏。
    • 这个 game_cards.owner 列将包含一个值来指示卡的位置;游戏中的示例可以是“牌组”、“放弃”、“p1”、“p2”、“p3”、“p4”

    拥有 甲板 然后你可以设置 game_cards.owner = 'deck' . 当一张牌被“抽出”时,你(比如玩家3)可以将抽出的牌的值更新为 game_cards.owner = 'p3' .

    下一个难题是将卡片收集到任意位置 游戏集 )另一种是把游戏中的牌和套牌联系起来( 卡片集会员 ). 当用户开始将卡片收集到一个集合中时,在 游戏集 一张新桌子 设置\u id ,的 游戏id 从主要 game_cards.game_id 场,和 主人 设置 定义,然后将记录添加到 带有 设置\u id 卡号 . 你不必保持沉默 因为你知道 游戏集 桌子。

    注: 此配置允许单个卡成为多个集的一部分。如果您不需要这个(即一张卡只能是一套卡的一部分),那么您可以添加一个 游戏id 卡片集会员 表和不使用 游戏集 完全。

    简而言之,您应该尽量减少客户机和服务器之间的通信量。如果您使用的是ajax,那么请确保消息开销(打包)尽可能小。看看这个 行动

    推荐文章