Python熄灯 - 如何获取一维数组中的相邻图块?

Lights Out in Python- How to Get Adjacent Tiles in a one-dimensional array?

我的下一个 python 项目是使用 python 和 pygame 的 Lights Out。我需要一些帮助来开始。我有一个创建空板的系统,然后创建 25 个索引位置,并将它们全部设置为 false,除了少数,如下所示:

board = []
for x in range(0, 25):
    board.append(False)
for x in range(0, random.randint(3,8)):
    board[x] = True
random.shuffle(board)

然后程序可以使用列表读取 5x5 网格中矩形的状态。但是如何找到相邻的图块?

熄灯由可以打开或关闭的瓷砖网格组成,类似于许多细胞动画。棋盘通常为 5x5,一定数量的棋子以 "on" 开头。当玩家单击一个图块时,该图块的状态以及所有正交相邻的图块都会翻转。

要获取相邻的图块,我是否应该制作一个字典,其中包含与相邻图块相对应的数字 0 到 24?必须有更简单的方法。研究没有发现任何有关一维阵列的信息,只有二维阵列。建模 this.

有了一块 MXM 大小的板,我们可以编写这个简短的算法:

def getIndexOfNeighoringTiles(i):
    neighbors = []
    if (i % M != 0):
        neighbors.append(i-1)
    if (i % M != (M-1)):
        neighbors.append(i+1)
    if (i / M != 0):
        neighbors.append(i-M)
    if (i / M != (M-1)):
        neighbors.append(i+M)
    return neighbors

稍微解释一下,我们有 4 种边缘情况,我们希望在这些情况下排除某些索引。