У меня возникла небольшая проблема с созданием сетки для игры «Броненосец» для моего класса Java. До сих пор я могу легко создать цикл for
, чтобы добавить объекты JPanel или JButton в JFrame. Тем не менее, моя проблема в том, что мне нужно будет использовать эти панели или кнопки снова, когда играете в игру (например, нажимая на кнопку, чтобы увидеть, разместил ли ваш противник корабль на этом квадрате и т. Д.). Есть ли простой способ в Java инициализировать ссылочные переменные для LOT объектов? Или я должен объявить все из них индивидуально?Инициализировать контрольные переменные для многих объектов?
ответ
Вы можете попробовать многомерный массив JPanels (или любого другого объекта). Создайте массив с тем же размером, что и ваша сетка. Строка ниже инициализирует массив с 5 строками и 5 столбцами.
JPanel[][] battleField = new JPanel[5][5];
Используйте вложенные для циклов для создания панелей в массиве.
for (int rowIndex = 0; rowIndex < battleField.length; rowIndex++)
{
for (int cellIndex = 0; cellIndex < battleField[rowIndex]; cellIndex++)
{
battleField[rowIndex][cellIndex] = new JPanel();
}
}
Если вы хотите позже ссылаться на массив battleField, вы просто превратите его в переменную экземпляра.
Является ли расположение для 2D-массива (x, y), например battleField [1] [2], позицией (1, 2)? –
Ничего, я ответил на свой вопрос. Большое вам спасибо за помощь, это именно то, что я искал! –
Вы всегда можете продлить JButton
, чтобы отслеживать необходимую информацию. Простой пример:
class MyButton extends JButton{
private MyGameInfo mygameInfo;
private int buttonId;
//More fields....
//Getters/Setters
}
Тогда вместо создания и добавления JButton
объектов в макете, создавать MyButton
объекты (что также является JButton, чтобы ваш макет не будет осуществляться) и использовать его дополнительные функциональные возможности для вашей игровой логики.
Это определенно полезно для того, что мне нужно, спасибо тонну! Мне нужно использовать что-то вроде этого, чтобы получить местоположение сетки кнопки, поэтому я могу сказать, попал ли я на корабль или нет. Еще раз спасибо! –
Для игры в боевой корабль вы, скорее всего, захотите получить местоположение кнопки после нажатия. Вы можете создать хеш-таблицу, используя ваши кнопки в качестве ключей, и точку, в которой она находится, как значение.
HashMap<JButton, Point> buttonMap = new HashMap<JButton, Point>();
for (int x = 0; x < COLUMNS; x++)
{
for (int y = 0; y < ROWS; y++)
{
JButton btn = new JButton();
btn.addActionListener(this);
buttonMap.put(btn, new Point(x, y));
//then add the button to your container
}
}
в вашем actionPerformed методе вы можете преобразовать кнопки в точке он находится в такой.
JButton btn = (JButton)actionEvent.getSource();
Point p = buttonMake.get(btn);
Конечно, вы должны будете правильно обрабатывать условие ошибки, такие как источник не будучи кнопки или не быть на карте ...
Oooo ... Я не знал, что могу это сделать! Большое вам спасибо, я определенно буду использовать это в хорошем использовании! –
Для справки, здесь является связанной matching game, который использует сетка кнопок. Связанный с этим answer демонстрирует применение шаблона Model-View-Controller к простой игре.
Спасибо! Это довольно аккуратно, и мне придется изучить возможность реализации MVC в моем проекте! –
- 1. Перекрестные контрольные переменные
- 2. Контрольные переменные окружения для CircleCI с Rspec
- 3. Инициализировать переменные как пустые
- 4. От многих до многих запросов для объектов
- 5. Изменить контрольные переменные в угловом
- 6. Инициализировать сразу несколько объектов
- 7. Linq для многих объектов с использованием MVC
- 8. Инициализировать переменные члены Const
- 9. инициализировать глобальные переменные Нитями
- 10. R: Скрыть контрольные переменные с дисплея lm
- 11. Контрольные переменные INSIDE функция просмотра - нет возврата
- 12. Автоматически инициализировать переменные экземпляра?
- 13. Как инициализировать статические переменные
- 14. Как сделать контрольные переменные в короне SDK?
- 15. Java-приложение для Java для многих объектов
- 16. Как инициализировать массив объектов?
- 17. Как инициализировать переменные для struct sockaddr_in
- 18. Переменные для многих подпрограмм: очистка кода
- 19. Как инициализировать список объектов
- 20. Критерий спящего режима для многих и многих объектов
- 21. Доктрины многих для многих объектов недвижимости в качестве возвращаемого значения
- 22. java инициализировать массив объектов
- 23. Две контрольные переменные в R для цикла (элегантно)
- 24. Получение подмножества объектов с отношением многих-многих
- 25. Как инициализировать массив объектов?
- 26. Переменные для определения вложенных объектов?
- 27. Инициализировать переменные-члены из параметра
- 28. Повторно инициализировать переменные в Tensorflow
- 29. глобальная карта C++, доступная для многих объектов
- 30. AS3: одно поведение для многих объектов
Не шутите, и у него есть достойные ответы на предыдущие вопросы ... движение вперед. – andersoj
Кроме того, рассмотрите ответы на голосование, которые вы сочтете полезными. – trashgod
Сделаю, извините за несоблюдение надлежащего этикета. Теперь, когда я это имею в виду, я буду следить за ним более внимательно. –