UNO游戏设计(I):基于Nonebot实现/游戏规则
UNO游戏设计(I):基于Nonebot实现/游戏规则

UNO游戏在QQ群聊中实现。由机器人充当类似“法官”的角色,负责给玩家们发牌、叙述游戏规则,并按照游戏规则维护游戏。玩家则只需在QQ群里参与即可。
前言
要实现该功能,需要设计很复杂的游戏机制。因此,在这个系列中将逐步拆解UNO游戏的实现过程,从最基础的功能模块入手,逐步构建起一个完整的游戏系统。我们将从发牌机制、规则讲解等基础功能开始,逐步深入到出牌逻辑、特殊牌效果处理、胜负判定等核心模块的实现。
首先需要明确UNO的游戏规则。
UNO游戏规则
一、卡牌组成
UNO游戏共有108张卡牌,分为数字牌、功能牌和万能牌三种类型:
- 数字牌:由红、黄、蓝、绿四种颜色组成,每种颜色有19张,包括数字0~9,其中数字1~9各有2张,数字0有1张。
- 功能牌:同样有红、黄、蓝、绿四种颜色,包含“跳过”、“反转”、“+2”三种功能,每种功能牌各有8张。
- 跳过牌:下家无法出牌,轮至下下家出牌。
- 反转牌:游戏顺序反转,由下家(原上家)出牌。
- +2牌:下家摸2张牌,不能出牌,轮至下下家出牌。
- 万能牌:黑色,分为“变色”和“+4”,每种各4张。
- 变色牌:无视参照牌,指定颜色出牌。
- +4牌:无视参照牌,指定颜色出牌,下家摸4张牌,不能出牌,轮至下下家出牌。出+4牌后下家可以提出质疑。
二、游戏流程
- 准备阶段:游戏开始前,确定先手(可通过随机或摸牌等方式决定)。每位玩家初始有7张牌,剩余的牌放在桌面中央形成牌堆。
- 出牌阶段:从先手玩家开始,按顺时针方向轮流出牌。玩家需要打出与弃牌堆顶端牌颜色或数字相同的牌,或者根据条件打出功能牌。打出的牌正面向上置入弃牌堆。如果无法打出任何牌,玩家必须从牌堆摸一张牌,若摸到的牌能打出则打出,否则回合结束。
- 特殊出牌情况:当玩家手中仅剩一张牌时,必须在出牌前大声喊出“UNO”。若被其他玩家发现未喊,则需摸两张牌作为惩罚。除了上述的强制出牌规则外,一些特殊规则如下:
- 7-0规则:
- 当一名玩家打出数字牌7时,必须选择一名其他玩家,与其交换手牌,此时全场玩家需亮出自己持有手牌的数量以供该玩家判断;
- 当一名玩家打出数字牌0时,所有玩家将手牌按照当前顺序交给下家。
- 抢牌规则:一名玩家打出牌后,若其他玩家手中有与之完全相同的牌,可直接打出此牌,抢夺此牌的效果。
- 叠加摸牌规则:玩家打出+2或是变色+4后,若下家手中也有+2或是变色+4,可接着打出并将效果累积,直到有玩家不能打出时,该玩家必须摸所有累积数量的牌。+2和+4不可交叉累积。
- 7-0规则:
三、+4牌质疑
当玩家打出+4万能牌时,被+4的玩家(下家)可以对其发起质疑。质疑的步骤如下:
- 提出质疑:在被+4的玩家需要摸牌之前可以提出质疑,质疑其是否真的没有与弃牌堆顶端牌颜色相同的牌。
- 检查手牌:
- 如果被质疑的玩家确实没有与弃牌堆顶端牌颜色相同的牌,则质疑失败,被质疑的玩家需要向全场展示自己手牌以证实自己确实没有与弃牌堆顶端牌颜色相同的牌,且被+4的玩家需要摸6张牌;
- 如果被质疑的玩家有与弃牌堆顶端牌颜色相同的牌,则不需要展示手牌并且认为下家质疑成功,并且被+4的玩家不需要摸牌,被质疑的玩家需要摸4张牌。
四、计分方式
游戏结束时,数字牌根据牌上的数字计算分数,功能牌计20分,万能牌计50分。其他玩家手中剩余牌的分数累计,记录于赢家帐下,累计分数最高为胜。
简化的游戏规则
为了简化该游戏规则以适应初步的程序,现仅考虑数字牌。因此,简化后的游戏规则为:
只有数字牌。
- 数字牌由红、黄、蓝、绿四种颜色组成,每种颜色有19张,包括数字0~9,其中数字1~9各有2张,数字0有1张。
游戏流程:
- 创建房间(指定房间号)
- 加入房间
- 锁定房间并开始游戏
- 随机指定先手
- 按照牌局规则出牌或摸牌
- 当一方牌摸完之后则胜利
检测合法机制
由于只有数字牌,所以检测机制相对简单。
- 和当前牌的数字或颜色有任一相同即可
细节与改动:
- “UNO”由机器人法官在群聊中公布,而非自己喊出,因此也不会有罚牌的过程;
- 如果出牌时出了不合法的牌,则系统会私聊提示,并阻止出牌(因此需要确保检测机制正确);
- 不考虑特殊规则。强制出牌规则也不保留。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 云间!
评论