2013-03-16 2 views
-1

Пожалуйста, могу мне помочь с моей программой Java, я создал метод ниже, мне просто интересно, как я могу применить это ниже к моей программе.Могу ли я посоветоваться с моей программой java? void return?

Последнее, что нужно сделать в классе модели, состоит в том, чтобы добавить больше значений в минное поле, чтобы определить, сколько мин находится рядом с любым заданным квадратом. Создал открытый метод addNumbers, который имеет возврат void и не принимает параметров. Ранее значения в поле the_minefield принимают только два значения: 0 (EMPTY_SQUARE) и 10 (MINE_SQUARE). Теперь любой пустой квадрат, примыкающий к заполненному шахтой квадрату, больше не будет иметь значение нуля - теперь он хранит количество мин рядом с ним. Это может быть любое значение между 1 (всего одна шахта) и 8 (полностью окруженная). Квадраты, содержащие шахту, по-прежнему имеют значение десять (MINE_SQUARE), независимо от того, что рядом с ними.

// Декларация квадратов ранее в программе:

public static int MINE_SQUARE = 10; 
public static int EMPTY_SQUARE = 0; 

// Метод, который нуждается в регулировке.

public void addNumbers() { 


} 
+0

что такое квадрат? Что такое «минное поле»? –

+0

минное поле представляет собой группу квадратов, например, например, игру тральщика, затем каждый отдельный квадрат используется для создания самой сетки. – user2175379

ответ

0

Когда выше метод вызывается, он перебирает окружающих клеток, которые вокруг текущей ячейки и приращение числа текущей ячейки, если сосед мина. Таким образом, в псевдокоде:

public void addNumbers() { 
    loop from current row - 1 to current row + 1 taking care of *edge* cases 
    loop from current col - 1 to current col + 1 taking care of *edge* cases 
     if row and col are not both current row and current column 
     if cell represented by row and col has a mine 
      increment the current cell's number 
} 

Обратите внимание, что вы должны заботиться с крайними случаями - это означает, что вам нужно знать, что делать, когда текущая ячейка находится на 0-й строке или седловине или на максимальной высоте строки или max column col. Когда я это сделал для своего приложения MineSweeper, я бы объявил ints как начальную и начальную точки моих вложенных циклов над циклами for и использовал Math.min, Math.max, чтобы помочь выбрать пределы для цикла. Таким образом, новый метод будет что-то вроде этого:

public void addNumbers() { 

    declare int rowMin. Use Math.max to compare 0 and row - 1 to assign rowMin 
    likewise for colMin 
    likewise for rowMax, but use Math.min instead 
    likewise for colMax 

    loop from row = rowMin to rowMax 
    loop from col = colMin to colMax 
     if row and col are not both current row and current column 
     if cell represented by row and col has a mine 
      increment the current cell's number 
} 

Обратите внимание, что для моего тральщик приложения, я сделал прямо противоположное: я петельным через все клетки, и если я нашел добытую клетку, я добавил счетчик шахтного всех своих соседей, но конечный результат был бы тот же:

public void reset() { 
    buttonsRemaining = (maxRows * maxCols) - mineNumber; 

    // randomize the mine location 
    Collections.shuffle(mineList); 
    // reset the model grid and set mines 
    for (int r = 0; r < cellModelGrid.length; r++) { 
    for (int c = 0; c < cellModelGrid[r].length; c++) { 
     cellModelGrid[r][c].reset(); 
     cellModelGrid[r][c].setMined(mineList.get(r 
       * cellModelGrid[r].length + c)); 
    } 
    } 
    // advance value property of all neighbors of a mined cell 
    for (int r = 0; r < cellModelGrid.length; r++) { 
    for (int c = 0; c < cellModelGrid[r].length; c++) { 
     if (cellModelGrid[r][c].isMined()) { 
      int rMin = Math.max(r - 1, 0); 
      int cMin = Math.max(c - 1, 0); 
      int rMax = Math.min(r + 1, cellModelGrid.length - 1); 
      int cMax = Math.min(c + 1, cellModelGrid[r].length - 1); 
      for (int row2 = rMin; row2 <= rMax; row2++) { 
       for (int col2 = cMin; col2 <= cMax; col2++) { 
       cellModelGrid[row2][col2].incrementValue(); 
       } 
      } 
     } 
    } 
    } 
} 

ссылка на мой код здесь: Minesweeper Action Events

Смежные вопросы