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

たくさんの方法。ここで実装するのが最も簡単なのは、ブール値の2次元配列です。開いているものと開いていないものです。開いていない場合は、閉じた正方形を表示します。そうでなければ、そこに何があるかを示してください。

別の方法は、これをよりオブジェクト指向にし、Tileクラスを作成することです。これは、鉱山のブール値と、オープン/クローズ/フラグ付き/疑問符の列挙型を保持します。

于 2010-12-14T00:30:44.507 に答える
1

2つのマトリックスが必要です。1つは地雷用(MineMatrix)、もう1つはユーザーのクリックを追跡するため(UserClickMatrix)です。

ゲームの開始時にエンドユーザーのみを表示し、UserClickMatrixすべてのセルを初期化する必要があります。NotClickedユーザーがセルをクリックするたびに、セルのステータスをに変更しますClicked。次に、からセルインデックスを取得し、UserClickMatrixMineMatrix()と照合しMineMatrix[clickedRow][clickedColumn] == MINEます。条件がTRUEと評価された場合、ゲームは終了します。

于 2010-12-14T00:29:51.997 に答える
0

グリッドマトリックスにGridElementクラスの要素が含まれていないのはなぜですか?このGridElementクラスは、プロパティ「boolvisibile」を持つことができます。intのグリッド行列はあまり良くありません。もっとOOを考えてください。

于 2010-12-14T00:37:57.613 に答える