2016-12-28 2 views
0

Я хотел бы создать тральщик. Во-первых, это будет работать на кнопках. Я думаю, что я буду работать над двухмерным массивом, и там будет как булевой массив, который будет представлять, где находятся бомбы, например, если booleanArray [0] [4] истинно, есть бомба.Minesweeper, как я могу работать с ячейками

Теперь, как я могу реализовать это в своих кнопках? Я могу установить имена на этих кнопках, а затем, если я нажму кнопку, то я получу имя из этого div. Например, когда я нажимаю первую кнопку, я получаю имя «00», затем получаю первую букву «0» и вторую букву «0» и анализирую ее на int. И это будут индексы из моего предыдущего booleanArray, в этом случае это будет booleanArray [0] [0].

Итак, могу ли я сделать это другим, лучшим способом, а не этим?

Это способ, которым я буду создавать кнопки:

for (int i = 0; i < 10; i++) { 
     for (int j = 0; j < 10; j++) { 
      JButton button = new JButton(""); 
      button.setPreferredSize(new Dimension(50, 50)); 
      button.setName(Integer.toString(i) + Integer.toString(j)); 
      } 
    } 

EDIT
у меня будет двумерный массив, который будет отражать мои кнопки: enter image description here

и теперь, как может Я проверяю, ударил ли я бомбой после того, как я нажал, например, на первой кнопке?

+0

Не знаете, что вы просите, но в вашем коде объекты JButton сразу выйдут из области действия на следующей итерации вашего цикла. Может быть, вам нужен 2-мерный массив JButton? –

+0

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

ответ

2

Просто провести двухмерную матрицу кнопок,

JButton[][] myButtons = new JButton[10][10]; 

, которые вы используете, чтобы сделать их, и все они называют один и тот же метод с их значением

for (int x=0; x<10; x++){ 
    for (int y=0; y<10; y++){ 
    myButtons[x][y] = new JButton("0"); 
    //add to page, or do it elsewhere 
    myButtons[x][y].addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      selectionButtonPressed(x,y); 
     } 
    }); 
    } 
} 

то звонок в YOUT метод selectionButtonPressed() сообщит вам, какая кнопка нажата, вы можете принять меры и даже внести изменения в кнопку с помощью myButtons[x][y].whatever()

1

Это один из способов bu т вы должны создать строку имени, используя что-то вроде:

button.setName(i + ":" j); 

Это позволит сделать его легче разобрать два значения, как вы можете просто использовать метод String.split(...).

Другим вариантом может быть, чтобы создать HashTable с JButton в качестве ключа, а затем использовать Point объект (представляющий строку/столбец) как значение Объекта HashTable. Затем вы просто используете метод get(...) HashMap для извлечения точки для нажатой кнопки.

Другим вариантом является расширение JButton и добавление двух параметров (строки, столбца) при создании кнопки. Затем вы также добавляете методы getRow() и getColumn().

Любой из этих подходов будет держать логику простой, и вам нужно создать только один ActionListener, который будет использоваться всеми кнопками.

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