洪水填充算法显示所有区域(扫雷舰) 我在C++上实现扫雷游戏的泛洪算法,一切都很好,但我不喜欢它的工作结果。在正确的版本中,它会显示除炸弹以外的所有区域,需要用数字显示一些区域,表示附近的炸弹数量 void floodfill(int x, int y) { if (x < 0 || y < 0 || x >= cellsX || y >= cellsY) // Check game field borders return; if (closedMap[x][y] == EMPTY && !visited[x][y]) // If this cell is empty and not visited... { openedMap[x][y] = closedMap[x][y]; visited[x][y] = true; floodfill(x + 1, y); floodfill(x, y + 1); floodfill(x - 1, y); floodfill(x, y - 1); } else if (closedMap[x][y] > EMPTY && closedMap[x][y] < CLOSED && !visited[x][y]) // If this cell is contains number and not visited... { openedMap[x][y] = closedMap[x][y]; visited[x][y] = true; floodfill(x + 1, y); floodfill(x, y + 1); floodfill(x - 1, y); floodfill(x, y - 1); } return; }

洪水填充算法显示所有区域(扫雷舰) 我在C++上实现扫雷游戏的泛洪算法,一切都很好,但我不喜欢它的工作结果。在正确的版本中,它会显示除炸弹以外的所有区域,需要用数字显示一些区域,表示附近的炸弹数量 void floodfill(int x, int y) { if (x < 0 || y < 0 || x >= cellsX || y >= cellsY) // Check game field borders return; if (closedMap[x][y] == EMPTY && !visited[x][y]) // If this cell is empty and not visited... { openedMap[x][y] = closedMap[x][y]; visited[x][y] = true; floodfill(x + 1, y); floodfill(x, y + 1); floodfill(x - 1, y); floodfill(x, y - 1); } else if (closedMap[x][y] > EMPTY && closedMap[x][y] < CLOSED && !visited[x][y]) // If this cell is contains number and not visited... { openedMap[x][y] = closedMap[x][y]; visited[x][y] = true; floodfill(x + 1, y); floodfill(x, y + 1); floodfill(x - 1, y); floodfill(x, y - 1); } return; },c++,algorithm,flood-fill,minesweeper,C++,Algorithm,Flood Fill,Minesweeper,我看你把一个用数字填充的空格视为一个空格。如果你给一块瓷砖指定了一个数字,你就不需要floodfill()越过它。问题在于,我只是将瓷砖作为一个间隔瓷砖进行洪水填充,这只是覆盖了除地雷以外的所有区域,而不仅仅是一些区域。现在,若函数找到一个数字,它将停止并绘制该数字 else if (closedMap[x][y] > EMPTY && closedMap[x][y] < CLOSED) // If this cell is contains number..

我看你把一个用数字填充的空格视为一个空格。如果你给一块瓷砖指定了一个数字,你就不需要
floodfill()
越过它。

问题在于,我只是将瓷砖作为一个间隔瓷砖进行洪水填充,这只是覆盖了除地雷以外的所有区域,而不仅仅是一些区域。现在,若函数找到一个数字,它将停止并绘制该数字

    else if (closedMap[x][y] > EMPTY && closedMap[x][y] < CLOSED) // If this cell is contains number...
    {
        openedMap[x][y] = closedMap[x][y];
        return;
    }
else if(closedMap[x][y]>空&&closedMap[x][y]
很难确定,但我希望
如果(x<0 | y<0 | x>cellsX | y>cellsY)
真的应该
如果(x<0 | y<0 | x>=cellsX | y>=cellsY)
哦,是的,应该是这样的。刚刚编辑。“一切都很好”--如果这是真的,你就不会有问题了。问题仍然没有解决,只是使用这种校正算法会更好(在我的版本中,x或y可能会比它应该的大),但这一校正并不能决定主要问题。(很抱歉回答得太晚了)。我用floodfill()将封闭的单元格填充为空单元格,在这种情况下,数字无法显示(如果我理解正确的话)。嗯,现在好像可以了。我在这里发布了一个算法的修改版本,顺便说一句,谢谢你的提示。
    else if (closedMap[x][y] > EMPTY && closedMap[x][y] < CLOSED) // If this cell is contains number...
    {
        openedMap[x][y] = closedMap[x][y];
        return;
    }