Проблема с игрой Java-сапер. прятать мины в начале игры?

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

person jesse    schedule 14.12.2010    source источник
comment
Это возвращает меня назад, мне пришлось написать Minesweeper на Java для лаборатории в универе.   -  person Orbling    schedule 14.12.2010
comment
Имеет смысл, это проект, назначенный университетом, в котором я учусь, лол.   -  person jesse    schedule 14.12.2010


Ответы (3)


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

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

person Pimgd    schedule 14.12.2010
comment
Спасибо! реализация методов работала отлично. Спасибо за помощь - person jesse; 14.12.2010

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

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

person rkg    schedule 14.12.2010

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

person Stijn Leenknegt    schedule 14.12.2010
comment
Я пытался реализовать это ранее, но у нас есть строгий список направлений, которым мы должны следовать. Я попытался создать класс Square для представления элементов сетки. Наш профессор требует, чтобы у нас был 2d-массив целых чисел для сетки... довольно глупо, если вы спросите меня. - person jesse; 14.12.2010
comment
Ур проф. думает, вероятно, в C ^^. Я должен предположить, что ответ Pimgd является лучшим. - person Stijn Leenknegt; 14.12.2010