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

如何在无Numpy的情况下用二维数组检测四子连珠(Connect4游戏)

四子棋(Connect4)四子连珠检测方案(无需Numpy)

假设你的c4board是6行7列的二维数组,用0表示空位置,1/2分别代表两位玩家的棋子,以下是纯Python实现的连珠检测方案,无需依赖Numpy。

核心逻辑

每次玩家落子后,只需要检查刚落子的位置的四个方向(垂直、水平、两条对角线)是否存在连续4枚相同棋子——比起遍历整个棋盘,这种方式更高效,也更贴合四子棋的落子规则。

1. 垂直方向检测(列上连珠)

垂直方向只需要向上统计连续相同的棋子(因为棋子是落在列的最底部空位,当前落子位置是该列最新的棋子):

def check_vertical(row, col, player, board):
    count = 1
    # 从当前位置向上遍历(假设row=0是棋盘最底部,row=5是最顶部)
    current_row = row + 1
    while current_row < 6 and board[current_row][col] == player:
        count += 1
        current_row += 1
    return count >= 4

2. 水平方向检测(行上连珠)

水平方向需要同时向左、向右统计连续相同的棋子:

def check_horizontal(row, col, player, board):
    count = 1
    # 向左遍历
    current_col = col - 1
    while current_col >= 0 and board[row][current_col] == player:
        count += 1
        current_col -= 1
    # 向右遍历
    current_col = col + 1
    while current_col < 7 and board[row][current_col] == player:
        count += 1
        current_col += 1
    return count >= 4

3. 左上-右下对角线检测

沿着左上到右下的方向,分别向两个端点统计连续相同棋子:

def check_diagonal_top_left(row, col, player, board):
    count = 1
    # 左上方向
    current_row, current_col = row - 1, col - 1
    while current_row >= 0 and current_col >= 0 and board[current_row][current_col] == player:
        count += 1
        current_row -= 1
        current_col -= 1
    # 右下方向
    current_row, current_col = row + 1, col + 1
    while current_row < 6 and current_col < 7 and board[current_row][current_col] == player:
        count += 1
        current_row += 1
        current_col += 1
    return count >= 4

4. 右上-左下对角线检测

沿着右上到左下的方向,分别向两个端点统计连续相同棋子:

def check_diagonal_top_right(row, col, player, board):
    count = 1
    # 右上方向
    current_row, current_col = row - 1, col + 1
    while current_row >= 0 and current_col < 7 and board[current_row][current_col] == player:
        count += 1
        current_row -= 1
        current_col += 1
    # 左下方向
    current_row, current_col = row + 1, col - 1
    while current_row < 6 and current_col >= 0 and board[current_row][current_col] == player:
        count += 1
        current_row += 1
        current_col -= 1
    return count >= 4

整合检测函数

将四个方向的检测整合到一个函数,只要任意方向满足连珠条件,就判定当前玩家获胜:

def check_win(row, col, player, board):
    return (check_vertical(row, col, player, board)
            or check_horizontal(row, col, player, board)
            or check_diagonal_top_left(row, col, player, board)
            or check_diagonal_top_right(row, col, player, board))

适配说明

如果你的c4board行索引定义相反(比如row=0是棋盘顶部),只需要调整垂直方向和对角线方向的行遍历逻辑:

  • 垂直方向改为向下遍历(current_row = row - 1,判断current_row >= 0)
  • 对角线的上下方向也对应反转即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:10:43