python中简化的扫雷器递归:为什么这段代码没有成功?

2024-09-20 23:00:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python开发一个扫雷舰克隆,但在使用reveal函数时遇到了困难。目前,我收到以下无限错误消息:

File "/Users/home/Desktop/minesweeper.py", line 79, in uncover_cells
uncover_cells(i - 1, j, board)

其中uncover_cells的定义如下(EDIT:在post结尾添加了更简单的问题示例):

^{pr2}$

最初的电话是:

b, locs = setup_game(100, 100, 50)
uncover_cells(0, 0, b)

我不认为递归限制已经达到,并且担心可能有逻辑错误。如有任何意见,我们将不胜感激。在

其他可能很重要的代码:board的每个元素都是Cell类型:

class Cell:

    def __init__(self, isMine, loc, visited = False, flagged = False):
        self.visited = visited  # think of visited as 'uncovered'
        self.flagged = flagged
        self.isMine  = isMine
        self.x       = loc[0]
        self.y       = loc[1]

        self.label = 0

板的设置如下:

def setup_game(length, width, n_mines):

    idx   = [(i, j)  for j in range(width)   for i in range(length)]
    board = [[None   for j in range(width)]  for i in range(length)]


    mine_locs = random.sample(idx, n_mines)

    for i, j in idx:

        if (i, j) in mine_locs:
            board[i][j] = Cell(isMine = True,  loc = (i, j))

        else:
            board[i][j] = Cell(isMine = False, loc = (i, j))

    return board, mine_locs

编辑:以下是我的问题最简单的例子:

def simple_fill(i, j, b):


    length = len(b)
    width  = len(b[0])

    if i > -1 and j > -1 and i < length and j < width and b[i][j] != 1:

        b[i][j] == 1

        simple_fill(i + 1, j, b)
        simple_fill(i - 1, j, b)
        simple_fill(i, j + 1, b)
        simple_fill(i, j - 1, b)

        simple_fill(i + 1, j + 1, b)
        simple_fill(i + 1, j - 1, b)
        simple_fill(i - 1, j + 1, b)
        simple_fill(i - 1, j - 1, b)

    return 

原始呼叫:

b = [[0 for j in range(100)] for i in range(100)]
simple_fill(0, 0, b)

Tags: inselfboardforcellrangesimplewidth
2条回答

我用堆栈重新实现了simple_fill

def simple_fill(x, y, b):

    length = len(b)
    width  = len(b[0])

    stack  = [(x,y)]

    while len(stack) > 0:

        i, j = stack.pop()

        if i > -1 and j > -1 and i < length and j < width :

            if b[i][j] != 1:
                b[i][j] = 1

                stack.append((i + 1, j))
                stack.append((i - 1, j)) 
                stack.append((i, j + 1))
                stack.append((i, j - 1))

                stack.append((i + 1, j + 1))
                stack.append((i + 1, j - 1))
                stack.append((i - 1, j + 1))
                stack.append((i - 1, j - 1))

希望这对将来的人有帮助(https://xkcd.com/979/

simple_fill()中:

b[i][j] == 1  # You have.
b[i][j] =  1  # Should be.

使用此代码,uncover_cells()可以工作。。。但只适用于较小的n。之后,我们达到最大递归深度。在

^{pr2}$

相关问题 更多 >

    热门问题