Java扫雷游戏问题。比赛开始时隐藏地雷?

时间:2010-12-14 00:25:27

标签: java algorithm minesweeper

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

3 个答案:

答案 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。