You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Pygame老虎机获胜判断问题:数组遍历匹配相同值及Joker

老虎机获胜判断函数修复方案

问题背景

我是Python新手,用Pygame开发简易老虎机,其余功能均正常,唯独获胜判断函数始终无法正确工作。

已定义数据

  • 获胜线数组:
    winningLines = [ [0, 1, 2, 3, 4], [5, 6, 7, 8, 9], [10, 11, 12, 13, 14] ]
    
  • 随机结果数组(对应5×3网格,左上角索引为0,右下角为14):
    self.results = ['0', '0', '8', '8', '4', '1', '6', '2', '1', '8', '0', '0', '8', '3', '0']
    
  • 网格布局:
ABCDE
00884
16218
00830

获胜规则

需判定结果中是否存在以下任意一种有效组合:

  1. 至少3个连续相同数字(如A=0、B=0、C=0)
  2. 包含Joker(符号为'7')的有效组合(Joker可替代任意符号,凑出至少3个相同的有效符号,例如007、707、777、0707等)

现有代码问题

之前尝试的几个版本均存在逻辑漏洞:

  1. 第一个版本只要连续三个符号里有Joker就判定获胜,忽略了是否能凑出有效相同符号
  2. 第二个版本遍历完第一条获胜线就直接返回False,未检查剩余两条线
  3. 第三个版本的判断条件错误,导致无论结果如何都返回True

修复后的获胜判断函数

def checkCombination(self, array):
    winningLines = [
        [0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9],
        [10, 11, 12, 13, 14]
    ]
    joker = '7'

    for line in winningLines:
        symbols = [array[i] for i in line]
        # 检查连续三个符号的组合
        for i in range(len(symbols) - 2):
            trio = symbols[i:i+3]
            non_joker = [s for s in trio if s != joker]
            # 情况1:三个符号完全相同(含全Joker)
            if len(set(trio)) == 1:
                print("Winner")
                return True
            # 情况2:含Joker,且非Joker符号至少有两个相同(Joker补全3个)
            elif joker in trio and len(non_joker) >= 2 and len(set(non_joker)) == 1:
                print("Winner")
                return True
        
        # 检查整条线的分散组合(比如两个0+一个Joker,或一个0+两个Joker)
        symbol_counts = {}
        joker_count = 0
        for s in symbols:
            if s == joker:
                joker_count += 1
            else:
                symbol_counts[s] = symbol_counts.get(s, 0) + 1
        
        for count in symbol_counts.values():
            if count + joker_count >= 3:
                print("Winner")
                return True
    
    # 所有获胜线均无有效组合
    return False

逻辑说明

  1. 连续三符号检查:
    • 先判断三个符号是否完全一致(包括全Joker的情况)
    • 若包含Joker,需确保非Joker符号至少有两个相同,Joker可替代第三个凑成有效组合
  2. 整条线分散组合检查:
    • 统计每个非Joker符号的数量,加上Joker的数量,若总和≥3,说明可通过Joker补全凑出有效组合
  3. 完整遍历所有获胜线:仅当所有三条线都检查完毕且无有效组合时,才返回False,避免提前终止遍历导致漏判

内容的提问来源于stack exchange,提问作者nitrototo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 05:02:01