如何找到列表的边界

1 投票
1 回答
66 浏览
提问于 2025-04-14 17:59

我正在制作一个叫做Nip的棋盘游戏。当玩家点击棋盘上的某个格子时,我需要知道这个格子是否在棋盘的边缘。

我的棋盘长这样:

这里是图片描述

我可以通过一个叫做“floor”的函数来检测玩家点击了哪个格子。不过,我不知道怎么判断这个格子是否在棋盘的边缘,像下面这样用列表表示:

EMPTY,EDGE = 0,0
BLACK = 1
WHITE = -1

board = [
    [      2,     2, EDGE, EDGE, EDGE, EDGE,     2,     2,],
    [      2, EDGE, EMPTY, EMPTY, EMPTY, EMPTY, EDGE,     2,], 
    [  EDGE, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EDGE,], 
    [  EDGE, EMPTY, EMPTY, BLACK, WHITE, EMPTY, EMPTY, EDGE,], 
    [  EDGE, EMPTY, EMPTY, WHITE, BLACK, EMPTY, EMPTY, EDGE,], 
    [  EDGE, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EDGE,], 
    [      2, EDGE, EMPTY, EMPTY, EMPTY, EMPTY, EDGE,     2,],
    [      2,     2, EDGE, EDGE, EDGE, EDGE,     2,     2,],
]

我试着查看所选格子的上、下、左、右四个方向,如果至少有一个方向没有格子,我就认为这个格子是在边缘。但这样的方法效果不好。下面是一个检查所选格子是否在边缘的函数。在代码中,row和col代表棋盘列表中所选格子的行和列。

  def is_on_the_edge(self,row,col):
        for drow in [-1, 0, 1]:
            for dcol in [-1, 0, 1]:
                if drow == 0 and dcol == 0:
                    continue
                check_row, check_col = row + drow, col + dcol
                if board[check_row][check_col] == 2:
                    return True
                else:
                    continue
        return False

我该怎么做呢?

这是我的完整代码

1 个回答

0
  1. 检查一下 board[row][col] 的值是不是 2。这个值是否代表“边缘”要看你的逻辑。如果不是 2,就继续下面的步骤。

  2. row in (0, 7) or col in (0, 7) 来判断坐标是否在 board 的边界上。如果在边界上,那就是边缘,否则就不是。

  3. 再检查一下 row in (1, 6) and col in (1, 6),这是为了检查对角线上的四个边缘单元格。如果这个条件成立,那就是边缘;如果不成立,那就不是。

撰写回答