Поле в котором можно нажать только кнопки которые стоят рядом (морской бой) - 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.385 из 5
Похожие ответы