MineSweeper递归洪水清理板

时间:2019-05-10 22:08:48

标签: python-3.x recursion minesweeper

我在为扫雷创建递归函数时遇到麻烦,当选择空白时,将显示所有相邻的空白。我正在使用两个以2D列表形式出现的游戏板,一个游戏板具有为用户隐藏的地雷位置生成的数字,而另一个游戏板则填充有显示的“覆盖”图块。

目前,我有一个泛洪填充功能,可以清除木板,而不是按预期的方式显示所有空白,直到遇到一个用整数或炸弹标记的字段为止。

我正在尝试传递未显示的木板,选定的行,选定的列和显示的木板。

试图让显示的板将空字段替换为未显示板中的字段。

def flood(displayedBoard, row, col, notDisplayed):

    mines = mineLocations(notDisplayed)

    if displayedBoard[row][col] != " ":
        displayedBoard[row][col] = " "




        if row != 1:
            flood(displayedBoard,row-1,col,notDisplayed)

        if row != maxRow-1:
            flood(displayedBoard,row+1,col,notDisplayed)

        if col != 1:
            flood(displayedBoard,row,col-1,notDisplayed)

        if col != maxCol:
            flood(displayedBoard,row,col+1,notDisplayed)

``````


the expected output if the space 4,2 is selected

```
    1 2 3 4 5 6 7 8 
   # # # # # # # # # #
 1 # . . . . . . . . #
 2 # 1 1 1 1 . . . . #
 3 #       2 . . . . #
 4 #     1 . . . . . #
 5 #     1 . . . . . #
 6 #     1 . . . . . #
 7 #   1 . . . . . . #
 8 # 1 1 . . . . . . #
   ###################
````


what is being output
```
     1 2 3 4 5 6 7 8 
     # # # # # # # # # # 
  1  #                  #
  2  #                  #
  3  #                  #
  4  #                  #
  5  #                  #
  6  #                  #
  7  #                  #
  8  #                  #
     # # # # # # # # # #
````

1 个答案:

答案 0 :(得分:0)

假设notDisplayed包含要显示的字符并放入显示的Board中,这应该可以工作

    if row < 1 or row >= maxRow:
        return
    if col < 1 or col >= maxCol:
        return
    if displayedBoard[row][col] == " ":
        return
    displayedBoard[row][col] = notDisplayed[row][col]
    if notDisplayed[row][col] == " ":
        flood(displayedBoard,row-1,col,notDisplayed)
        flood(displayedBoard,row+1,col,notDisplayed)
        flood(displayedBoard,row,col-1,notDisplayed)
        flood(displayedBoard,row,col+1,notDisplayed)

问题在于您的测试条件。您必须测试notDisplayed个字符才能知道是否应该递归,否则您将清空所有屏幕。