Java игра тральщик проблема.прятать мины, когда начинается игра? - PullRequest
0 голосов
/ 14 декабря 2010

Мне удалось успешно инициировать минное поле, когда игра начинается с 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 ]

4 голосов
/ 14 декабря 2010

Множество методов.Здесь проще всего реализовать 2-й массив логических значений: открытый и неоткрытый.Если не открыто, покажите закрытый квадрат.Иначе, покажите, что там.

Альтернативным методом было бы сделать этот объект более ориентированным и создать класс Tile: он содержит логическое значение для шахты и перечисление для открытых / закрытых / помеченных / вопросительных знаков.

1 голос
/ 14 декабря 2010

У вас должно быть две матрицы: одна для мин (MineMatrix) и одна для отслеживания кликов пользователя (UserClickMatrix).

Вы должны только показать конечному пользователю UserClickMatrix и инициализировать все ячейки с NotClicked в начале игры. Всякий раз, когда пользователь нажимает на ячейку, измените состояние ячейки на Clicked. Затем возьмите индексы ячеек с UserClickMatrix и сравните с MineMatrix (MineMatrix[clickedRow][clickedColumn] == MINE). Если условие оценивается как ИСТИНА, игра заканчивается.

0 голосов
/ 14 декабря 2010

Почему ваша матрица сетки не содержит элементов класса GridElement?Этот класс GridElement может иметь свойство "bool visibile".Сетка матрицы int не так хороша.Думай больше ОО.

...