擅长:python、mysql、java
<p>尝试以下操作:</p>
<pre><code># indices 0 - 3 are for horizontal, 4 - 7 are for vertical
dij = [(0, 1), (1, 0), (0, -1), (-1, 0),
(1, 1), (1, -1), (-1, 1), (-1, -1)]
def getSurroundingTiles(self, tile, horizontal = True, vertical = True):
index = list(self.getTiles()).index(tile)
maxtile = self.sqrtnum - 1 # Offset for 0 indexing
i = int(math.floor(index / self.sqrtnum))
j = int(index % self.sqrtnum)
surroundingTiles = []
startat = 0 if horizontal else 4
stopat = 8 if vertical else 4
for di, dj in dij[startat:stopat]:
if 0 <= i + di <= maxtile and 0 <= j + dj <= maxtile:
surroundingTiles.append(self[i + di][j + dj])
return surroundingTiles
</code></pre>
<p>(未测试)它使用单位步长相对地计算相邻索引,这样您就不必显式地键入它们。它还同时测试所有<code>out of bounds</code>情况。你知道吗</p>
<p>我假设<code>horizontal</code>和<code>vertical</code>的意思是<code>horizontally and vertically adjacent</code>和<code>diagonally adjacent</code>,正如代码所示。你知道吗</p>