【问题标题】:Java minesweeper game problem. hiding mines when the game begins?Java扫雷游戏问题。游戏开始时隐藏地雷?
【发布时间】:2023-03-04 03:21:02
【问题描述】:

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

【问题讨论】:

  • 这让我回过神来,我不得不为 uni 的一个实验室用 Java 编写 Minesweeper。
  • 有道理,这是我就读的大学分配的项目lol

标签: java algorithm minesweeper


【解决方案1】:

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

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

【讨论】:

  • 谢谢!实施这些方法效果很好。感谢您的帮助
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 我之前尝试过实现这一点,但我们有一份严格的指示清单,需要遵循。我尝试创建一个 Square 类来表示网格中的元素。我们的教授要求我们有一个二维整数数组用于网格......如果你问我,这很愚蠢。
    • 你的教授。可能在 C 中思考^^。我应该建议 Pimgd 的答案是最好的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-15
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多