大尺寸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
相关产品推荐
相关产品推荐

