这是我之前关于tic tac toe游戏的问题的延续。我正在制作一个功能,它将收集一个tic tac toe board的所有空网格图块,并将它们返回到列表中。此函数将是递归的,因为它将继续查找与所做移动相邻的空网格图块。像这样:
<------->
< X O - >
< - - X >
< O X - >
<------->
因此,假设用户(或者在这种情况下,我为计算机播放的代码编写的代码)想要通过选择一个磁贴来了解哪些网格块是空的。对于上面的示例,瓷砖将编号为
0 1 2
3 4 5
6 7 8
所以我们假设计算机选择了磁贴1 - 它将搜索相邻的磁贴(在这种情况下,顶部,左侧,右侧和底部)并查看它是否可以在那里移动。如果它发现相邻的图块是空的,它也会找到该图块的相邻图块,直到它耗尽所有可能性。因此,我希望能够使用当前板和playerMove调用我的函数,并找到相邻的空白块,并将它们附加到列表中。有什么提示吗?
def whatIsEmpty(moveList,move):
emptyTiles = []
#something that allows you to find the adjacent tiles of the move
#something that allows you to find the adjacent tiles of the tiles found above, until all are found
我知道我需要一对for循环,但我不知道如何开始。我所知道的是我想要在一个假想的3x3网格中间移动,并找到它的相邻图块以查看它们是否为空,依此类推。所以在2D列表中,我会使用这样的东西:
moveList[x-1][y]
moveList[x][y+1]
moveList[x+1][y]
moveList[x][y+1]
其中每个对应于顶部,右侧,左侧和底部,这将以递归方式使用。任何提示都非常感谢。
答案 0 :(得分:1)
在这种情况下,递归策略可能不是最好的。考虑一下您自己提供的示例:
<------->
< X O - >
< - - X >
< O X - >
<------->
假设下一步移动是在中间区块中进行的。如果递归函数仅检查与其相邻的四个图块,那么它将错过从其余图块“切断”的图块(右下图)。如果你要编写一个函数来检查所有8个相邻的图块(包括对角线相邻的图块),你也可以迭代地编写它。
for i in range(3):
for j in range(3):
pass # Replace with code to add empty tile to list