四子棋Win函数行/列判定失效问题排查与修复求助
问题排查与修复方案
原Win函数的核心问题
- 行判定逻辑完全错误:
原代码中针对行的判断,无论当前棋盘格子是1还是非1,都会把boolie设为False,完全无法检测连续四子;还错误地在循环内直接return,逻辑偏离四子棋胜利规则。 - 列判定逻辑致命错误:
开局棋盘为空时,所有格子都不等于1,代码会把boolie设为True,循环结束后直接返回True,这就是开局提示玩家1获胜的直接原因。 - 整体逻辑偏差:
原代码试图判断整行/整列是否全为当前玩家标记,但四子棋的胜利条件是连续四个相同标记,而非整行整列一致。
修复后的胜利判定实现
以下是符合10×10四子棋规则的胜利判定函数,包含行、列、两条对角线的连续四子检测:
def win(): global matrix, who2 SIZE = 10 target = who2 # 当前玩家的标记(1或2) # 检测行:每行中连续4个target for i in range(SIZE): for j in range(SIZE - 3): if (matrix[i][j] == target and matrix[i][j+1] == target and matrix[i][j+2] == target and matrix[i][j+3] == target): return True # 检测列:每列中连续4个target for i in range(SIZE - 3): for j in range(SIZE): if (matrix[i][j] == target and matrix[i+1][j] == target and matrix[i+2][j] == target and matrix[i+3][j] == target): return True # 检测主对角线(左上到右下):连续4个target for i in range(SIZE - 3): for j in range(SIZE - 3): if (matrix[i][j] == target and matrix[i+1][j+1] == target and matrix[i+2][j+2] == target and matrix[i+3][j+3] == target): return True # 检测副对角线(右上到左下):连续4个target for i in range(3, SIZE): for j in range(SIZE - 3): if (matrix[i][j] == target and matrix[i-1][j+1] == target and matrix[i-2][j+2] == target and matrix[i-3][j+3] == target): return True # 没有找到连续四子 return False
关键说明
- 严格遵循胜利规则:遍历所有可能出现连续四子的位置(行从j=0到6,列从i=0到6,对角线同理),检查是否有连续四个当前玩家的标记。
- 可优化全局变量依赖:如果想让代码更健壮,可以把
matrix和who2作为参数传入函数,替代global声明。 - 兼容原有对角线逻辑:如果原对角线判定功能正常,可保留原有代码,仅替换错误的行、列判定部分。
内容的提问来源于stack exchange,提问作者joee__mama
相关产品推荐
相关产品推荐

