当游戏开始时,我已经成功地启动了一个雷区,其中10个地雷随机散落在战场上。但是,当游戏开始时,我在向用户隐藏这些地雷时遇到了问题。如你所知,扫雷的目的是找到地雷的位置而不能看到它们。我需要帮助搞清楚如何隐藏地雷。
下面是我为Grid类编写的代码,它启动网格并包含一个用矿井填充它的方法。如何隐藏这些地雷并在点击它们时才显示它们?谢谢你的帮助!
public class Grid {
private int[][] grid;
private boolean isHidden;
private int rows;
private final int columns;
private final int mines;
public Grid() {
this.rows = 8;
this.columns = 8;
this.mines = 10;
this.grid = new int[rows][columns];
}
public int[][] getGrid() {
return grid;
}
public int getRows() {
return rows;
}
public int getColumns() {
return columns;
}
public void fillGrid() {
Random ranGen = new Random();
for(int i = 0; i < this.mines; ) {
int row = ranGen.nextInt(this.rows - 1);
int column = ranGen.nextInt(this.columns - 1);
if(grid[row][column] != MinesweeperGUI.MINE) {
grid[row][column] = MinesweeperGUI.MINE;
i++;
}
}
}
答案 0 :(得分:4)
很多方法。这里最容易实现的是2d布尔数组:打开和未打开。如果没有打开,请显示一个封闭的方块。否则,显示那里有什么。
另一种方法是将此更加面向对象,并创建一个Tile类:它包含一个矿井的布尔值,以及一个用于打开/关闭/标记/问号的枚举。
答案 1 :(得分:1)
你应该有两个矩阵:一个用于地雷(MineMatrix
),另一个用于跟踪用户点击(UserClickMatrix
)。
您应该只显示最终用户UserClickMatrix
并在游戏开始时使用NotClicked
初始化所有单元格。每当用户单击一个单元格时,将单元格的状态更改为Clicked
。然后,从UserClickMatrix
获取单元格索引并检查MineMatrix(MineMatrix[clickedRow][clickedColumn] == MINE
)。如果条件评估为TRUE,则游戏结束。
答案 2 :(得分:0)
为什么你的网格矩阵不包含GridElement类的元素?此GridElement类可以具有属性“bool visibile”。 int的网格矩阵不太好。想想更多OO。