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'] - 网格布局:
| A | B | C | D | E |
|---|---|---|---|---|
| 0 | 0 | 8 | 8 | 4 |
| 1 | 6 | 2 | 1 | 8 |
| 0 | 0 | 8 | 3 | 0 |
获胜规则
需判定结果中是否存在以下任意一种有效组合:
- 至少3个连续相同数字(如A=0、B=0、C=0)
- 包含Joker(符号为
'7')的有效组合(Joker可替代任意符号,凑出至少3个相同的有效符号,例如007、707、777、0707等)
现有代码问题
之前尝试的几个版本均存在逻辑漏洞:
- 第一个版本只要连续三个符号里有Joker就判定获胜,忽略了是否能凑出有效相同符号
- 第二个版本遍历完第一条获胜线就直接返回False,未检查剩余两条线
- 第三个版本的判断条件错误,导致无论结果如何都返回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
逻辑说明
- 连续三符号检查:
- 先判断三个符号是否完全一致(包括全Joker的情况)
- 若包含Joker,需确保非Joker符号至少有两个相同,Joker可替代第三个凑成有效组合
- 整条线分散组合检查:
- 统计每个非Joker符号的数量,加上Joker的数量,若总和≥3,说明可通过Joker补全凑出有效组合
- 完整遍历所有获胜线:仅当所有三条线都检查完毕且无有效组合时,才返回False,避免提前终止遍历导致漏判
内容的提问来源于stack exchange,提问作者nitrototo
相关产品推荐
相关产品推荐

