MineSweeper очистительная доска - PullRequest
0 голосов
/ 11 мая 2019

У меня проблемы с созданием рекурсивной функции для мойки, когда при выборе пустого места отображаются все соседние пустые места. Я использую две игровые доски в виде списка 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 голосов
/ 11 мая 2019

Если предположить, что notDisplayed содержит символ, который вы хотите раскрыть и вставить в отображаемую доску, это должно сработать

    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 символов, чтобы знать, следует ли вам повторять или нет, в противном случае вы очистите весь экран.

...