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

Python开发Connect4游戏:获胜检测功能异常求助

修复Connect4获胜检测问题

问题根源

你的获胜检测逻辑是连续计数的阈值写错了——当前代码统计到3个连续同色棋子就判定获胜,正确条件应该是4个。另外斜向检测的遍历范围可能也没留够4个棋子的空间,导致漏判或误判。

最小改动修复方案

以下是针对三种获胜方向的具体修改,尽量保留你原有代码结构:

1. 横向检测修正

假设你原代码是这样的:

for row in board:
    count = 1
    for i in range(1, len(row)):
        if row[i] == row[i-1] and row[i] != ' ':
            count += 1
            if count == 3:  # 这里是错误点
                return row[i]
        else:
            count = 1

只需要把判断条件的3改成4:

for row in board:
    count = 1
    for i in range(1, len(row)):
        if row[i] == row[i-1] and row[i] != ' ':
            count += 1
            if count == 4:  # 修正为4
                return row[i]
        else:
            count = 1

2. 纵向检测修正

原代码可能类似:

for col in range(len(board[0])):
    count = 1
    for row in range(1, len(board)):
        if board[row][col] == board[row-1][col] and board[row][col] != ' ':
            count += 1
            if count == 3:  # 错误点
                return board[row][col]
        else:
            count = 1

同样把3改成4:

for col in range(len(board[0])):
    count = 1
    for row in range(1, len(board)):
        if board[row][col] == board[row-1][col] and board[row][col] != ' ':
            count += 1
            if count == 4:  # 修正为4
                return board[row][col]
        else:
            count = 1

3. 斜向检测(两种方向)

右下到左上(\方向)

原代码可能因为遍历范围没留够4个棋子的空间,导致只检测3个:

for row in range(len(board)-2):  # 错误范围
    for col in range(len(board[0])-2):
        if board[row][col] == board[row+1][col+1] == board[row+2][col+2] and board[row][col] != ' ':
            return board[row][col]

修改范围并增加第四个棋子的判断:

for row in range(len(board)-3):  # 留出4个连续位置的空间
    for col in range(len(board[0])-3):
        if board[row][col] == board[row+1][col+1] == board[row+2][col+2] == board[row+3][col+3] and board[row][col] != ' ':
            return board[row][col]

左下到右上(/方向)

原代码同理:

for row in range(2, len(board)):  # 错误范围
    for col in range(len(board[0])-2):
        if board[row][col] == board[row-1][col+1] == board[row-2][col+2] and board[row][col] != ' ':
            return board[row][col]

修改为:

for row in range(3, len(board)):  # 修正范围
    for col in range(len(board[0])-3):
        if board[row][col] == board[row-1][col+1] == board[row-2][col+2] == board[row-3][col+3] and board[row][col] != ' ':
            return board[row][col]

验证步骤

改完后测试这几个场景:

  • 横向/纵向/斜向连续4个"r"或"y",确认能正确判定获胜
  • 连续3个同色棋子时,不会误判获胜
  • 边界位置的4连子(比如棋盘最底部的纵向4连)也能被检测到

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:26:59