0

当游戏开始时,我已经能够成功地启动一个雷区,其中 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++;
   }
  }
    }
4

3 回答 3

4

很多方法。在这里最容易实现的是一个二维布尔数组:打开和未打开。如果没有打开,显示一个封闭的正方形。否则,显示那里有什么。

另一种方法是将这个更面向对象,并创建一个 Tile 类:它包含一个用于矿井的布尔值,以及一个用于打开/关闭/标记/问号的枚举。

于 2010-12-14T00:30:44.507 回答
1

您应该有两个矩阵:一个用于挖掘 ( MineMatrix),另一个用于跟踪用户点击 ( UserClickMatrix)。

您应该只显示最终用户UserClickMatrixNotClicked在游戏开始时初始化所有单元格。每当用户单击单元格时,将单元格的状态更改为Clicked。然后,从UserClickMatrixMineMatrix ( MineMatrix[clickedRow][clickedColumn] == MINE) 中获取单元格索引并检查。如果条件评估为 TRUE,则游戏结束。

于 2010-12-14T00:29:51.997 回答
0

为什么您的网格矩阵不包含 GridElement 类的元素?这个 GridElement 类可以有一个属性“bool visibile”。int 的网格矩阵不是很好。多想OO。

于 2010-12-14T00:37:57.613 回答