Поле в котором можно нажать только кнопки которые стоят рядом (морской бой) - Java
Формулировка задачи:
Идея морского боя. Реализовать хочу так, есть поле (10х10) и дается возможность разместить корабли как хочет пользователь. А размещает он нажимая просто на кнопки на поле. Есть корабль который занимает 4 клетки, я вот немогу сделать так чтоб пользователь мог нажать 4 кноки. У меня была такая идея, нажав одну кнопу, ее координаты заносятся в список, и при нажатии на следующую кнопку идет проверка, из списка берется предыдущая координата и сравнивается, нажата ли соседняя кнопка или нет. Я понимаю почему начинает "зажевывать", в том смысле что нажимая на первую координату он сразу пишет:
"Illegal ship placement"
так как все в одном цыкле, пытался сделать по функциям, та же ошибка. Не могу понять как после первой координаты перестать выполнять первое действие и перейти на второе. Написан отдельный классListener
для обработки//--- void initButtons() { playerListener = new PlayerListener(); player = new JButton[N][N]; for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { (player[i][j] = new JButton()) .addActionListener(playerListener); player[i][j].setEnabled(false); } } } //----- class PlayerListener implements ActionListener { public void actionPerformed(ActionEvent e) { JButton but = (JButton) e.getSource(); Point point = but.getLocation(); for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (point.equals(player[i][j].getLocation())) { while (coordinates.size() == 0) { System.out.println(coordinates.size()); coordinates.add(new Coordinates(i, j)); player[i][j].setEnabled(false); player[i][j].setText("F"); } if (coordinates.size() == 1) { System.out.println(coordinates.size()); int iPrev = coordinates.get(0).getI(); int jPrev = coordinates.get(0).getJ(); if (((iPrev - 1) == i && jPrev == j) || ((iPrev + 1) == i && jPrev == j) || (iPrev == i && (jPrev + 1) == j) || (iPrev == i && (jPrev - 1) == j)) { coordinates.add(new Coordinates(i, j)); player[i][j].setEnabled(false); player[i][j].setText("F"); } else { JOptionPane.showMessageDialog(null, "Illegal ship placement"); player[i][j].setText(""); player[i][j].setEnabled(true); } } } } } } }
Попробовал через
switch
тоже не получилось(Решение задачи: «Поле в котором можно нажать только кнопки которые стоят рядом (морской бой)»
textual
Листинг программы
010 121 010
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д