如何找到列表的边界
我正在制作一个叫做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
检查一下
board[row][col]
的值是不是 2。这个值是否代表“边缘”要看你的逻辑。如果不是 2,就继续下面的步骤。用
row in (0, 7) or col in (0, 7)
来判断坐标是否在board
的边界上。如果在边界上,那就是边缘,否则就不是。再检查一下
row in (1, 6) and col in (1, 6)
,这是为了检查对角线上的四个边缘单元格。如果这个条件成立,那就是边缘;如果不成立,那就不是。