我正在尝试制作一些代码,以便单个元素矩阵可以引用与其相邻的元素。有点像你只能将游戏块移动到相邻的空间。例如,我希望能够说出类似的内容:
if x matrix element is adjacent to y element:
y_element_adjacent = True
我想知道如何完成这个“相邻”部分。
编辑:我已经尝试制作一个列表并为每个元素分配一个数字。因此,在100个元素列表(或10x10游戏板)中,空格1x1将是第0个元素,空格1x3将是第2个元素......就像这样:
1,2,3,4,5,6,7,8,9,10
11,12,13,14,15,16,17,18,19,20然而,问题是如果x元素是10,我的代码将使用+ 1来查找相邻的空格,而11则不相邻。然后我意识到列表不是正确的方法,矩阵将成为一种方法。我对如何以不同于列表的方式使用它们感到有些困惑。
任何帮助表示赞赏!感谢。
答案 0 :(得分:0)
这是获取所有相邻元素的索引的简单方法。
from itertools import product, starmap
x, y = (x_coordinate, y_coordinate) # matrix values here
cells = starmap(lambda a,b: (x+a, y+b), product((0,-1,+1), (0,-1,+1)))
对于x,y = (1,1)
的输入,这会返回包含(list(cells)[1:])
的{{1}}。
这种实现可能会对您的特定场景感兴趣(确定某个游戏块可能移动到哪个位置)。如果要包含边框检查,可以尝试
[(1, 0), (1, 2), (0, 1), (0, 0), (0, 2), (2, 1), (2, 0), (2, 2)]
其他解决方案(及其来源)可在此处找到:Determining neighbours of cell two dimensional list