Проблема с реализацией раскрытия тральщика на питоне без функций

Я работаю над созданием игрового тральщика для проекта, но столкнулся с проблемой с раскрытием части игры (если ввести координаты любой ячейки, окруженной 0 минами, то игра должна продолжать открывать соседние плитки если не достигнуто ненулевое значение ячейки). Я также искал это в Интернете, но не нашел подходящего решения (мне не разрешено использовать функции, поскольку это не является частью учебной программы этого года). Может ли кто-нибудь дать какое-либо представление о том, как я могу реализовать это в python.

P.S. Для справки вы можете посмотреть этот код

def neighbours(r, col):
 
global mine_values
global numbers
global vis

# If the cell already not visited
if [r,col] not in vis:

    # Mark the cell visited
    vis.append([r,col])

    # If the cell is zero-valued
    if numbers[r][col] == 0:

        # Display it to the user
        mine_values[r][col] = numbers[r][col]

        # Recursive calls for the neighbouring cells
        if r > 0:
            neighbours(r-1, col)
        if r < n-1:
            neighbours(r+1, col)
        if col > 0:
            neighbours(r, col-1)
        if col < n-1:
            neighbours(r, col+1)    
        if r > 0 and col > 0:
            neighbours(r-1, col-1)
        if r > 0 and col < n-1:
            neighbours(r-1, col+1)
        if r < n-1 and col > 0:
            neighbours(r+1, col-1)
        if r < n-1 and col < n-1:
            neighbours(r+1, col+1)  
             
    # If the cell is not zero-valued            
    if numbers[r][col] != 0:
            mine_values[r][col] = numbers[r][col]

Ссылка — https://www.askpython.com/python/examples/create-minesweeper-using-python


person ADITYA MITTAL 11E    schedule 21.01.2021    source источник


Ответы (1)


Это должно работать:

    #before main loop
    shifts = [
        (-1,-1),
        (-1, 1),
        (-1, 0),
        ( 1,-1),
        ( 1, 1),
        ( 1, 0),
        ( 0,-1),
        ( 0, 1),
    ]
    #main loop
    to_reveal = []
    if (x,y) not in vis:
        to_reveal.append((x,y))

    while to_reveal != []:
        cell = to_reveal.pop()
        vis.append(cell)
        if board[cell[1]][cell[0]] == 0:
            for shift in shifts:
                if (cell[0] + shift[0],cell[1] + shift[1]) not in vis and 0 <= (cell[0] + shift[0]) <= 9 and 0 <= (cell[1] + shift[1]) <= 9:
                    to_reveal.append((cell[0] + shift[0],cell[1] + shift[1]))

Этот код делает то, что после того, как игрок выбирает плитку для открытия, эта плитка добавляется в список. Затем, если это 0, добавьте всех соседей в список и т. Д.

person Minek Po1    schedule 21.01.2021
comment
Привет! Я добавил ваш код в игру и запустил, но он показывает только ту ячейку, которая изначально выбрана. - person ADITYA MITTAL 11E; 22.01.2021
comment
@ ADITYAMITTAL11E вам, возможно, придется изменить условие if, чтобы оно соответствовало вашей реализации. - person Minek Po1; 22.01.2021
comment
О да, спасибо, я понял, немного поправил, но теперь все работает - person ADITYA MITTAL 11E; 22.01.2021