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

大尺寸Tic Tac Toe棋盘的三连对角线检测算法求助

任意尺寸Tic Tac Toe棋盘的对角线三连检测方案

核心逻辑

不管棋盘是3x3、4x4还是更大的N×N,对角线方向的三连只需要关注两种斜线:左上到右下的"正斜线",以及右上到左下的"反斜线"。关键是遍历所有能放下连续三个格子的起始位置,避免索引越界,然后检查这三个格子是否被同一玩家占据。

分步实现

1. 正斜线(左上→右下)检测

遍历每个可能的起点(row, col),要求起点的行和列都至少能往后延伸2个格子(即row ≤ N-3、col ≤ N-3),然后检查board[row][col]、board[row+1][col+1]、board[row+2][col+2]是否相同且不为空。

2. 反斜线(右上→左下)检测

遍历起点(row, col)时,要求行能往后延伸2个格子(row ≤ N-3),同时列能往前延伸2个格子(col ≥ 2),然后检查board[row][col]、board[row+1][col-1]、board[row+2][col-2]是否相同且不为空。

Python代码实现

def check_diagonal_win(board):
    board_size = len(board)
    # 检查正斜线三连
    for row in range(board_size - 2):
        for col in range(board_size - 2):
            current = board[row][col]
            if current != "" and current == board[row+1][col+1] == board[row+2][col+2]:
                return (True, current)
    # 检查反斜线三连
    for row in range(board_size - 2):
        for col in range(2, board_size):
            current = board[row][col]
            if current != "" and current == board[row+1][col-1] == board[row+2][col-2]:
                return (True, current)
    # 无对角线三连获胜情况
    return (False, None)

注意事项

  • 代码假设空格子用空字符串""标记,若你用None或其他符号,直接替换判断条件即可。
  • 边界判断是核心:board_size - 2确保起点后有足够的格子,反斜线的col从2开始是为了避免往左走两步后列索引变为负数。
  • 可将此函数与你已实现的行、列检测函数整合,比如写一个总判断函数check_win(board),依次调用三类检测,只要任意一类返回获胜就判定游戏结束。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 16:12:37