Перейдем в класс pole, на закладку pole.java (см. рис. 5).
Рис. 5
В классе pole выполним отрисовку игрового поля игрока на основании данных двумерного массива. Прежде всего, добавим переменную myGame с типом gameдля класса pole:
Через эту переменную мы сможем получить доступ к двумерному массиву после создания объекта на основании класса game. В конструкторе класса pole выполним создание объекта и вызовем метод start()для запуска игры. Добавим строки в самом начале конструктора перед загрузкой изображений:
//Конструктор класса
public pole()
{
// Создаем объект новой игры
myGame = new game();
// Запускаем игру
myGame.start();
//Попытка загрузки всех изображений для игры
try
{
Теперь через переменнуюmyGame можно обратиться к данным двумерного массива и вызывать методы класса game. Обработчик события кнопки Новая игра пока не выполняет никаких действий.Добавим в него вызов метода start():
//Создаем кнопку Новая игра
btn1 = new JButton();
btn1.setText("Новая игра");
btn1.setForeground(Color.BLUE);
btn1.setFont(new Font("serif",0,30));
btn1.setBounds(130, 450, 200, 80);
btn1.addActionListener(new ActionListener() {
// Обработчик события при нажатии на кнопку Новая игра
public void actionPerformed(ActionEvent arg0) {
// Запуск - начало игры
myGame.start();
}
});
add(btn1);
Теперь каждый раз при нажатии на кнопку Новая игра будет происходить перезапуск игры. Осталось выполнить отрисовку игрового поля игрока на основании данных двумерного массива. Для этого перейдем в метод paintComponent()и после выведения надписей Компьютер, Игрок добавим программный код:
// Выведение надписей
gr.drawString("Компьютер", 150, 50);
gr.drawString("Игрок", 590, 50);
// Отрисовка игрового поля Игрока на основании массива
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
// Если это палуба корабля
if ((myGame.masPlay[i][j] >= 1) && (myGame.masPlay[i][j] <= 4)) {
Два цикла for перебирают массив от начала до конца. Верхний цикл for перебирает строки, а внутренний (нижний) цикл forперебирает элементы в каждой строке. Если значение в массиве в пределах от 1до 4, значит - это палуба корабля и мы выводим изображение палубы корабля. Самое сложное здесь - подобрать параметры в методе drawImage():
Первый параметр –это изображениеpaluba.png, которое загружено в игру.
Четвертый параметр–это ширина картинки в пикселях – 30.
Пятый параметр –это высота картинки в пикселях –30.
Сложнее всего дело обстоит со вторым и третьим параметром–это координаты верхнего левого уголка картинки по отношению к левому верхнему углу панели (игрового поля). Отступ слева для каждой ячейки будет: 500+j*30, каждая следующая картинка должна быть правее соседней на30пикселей.Значение 500 –это левая граница игрового поля игрока. Отступ сверху для каждой ячейки будет:100+i*30, каждая следующая картинка должна быть ниже соседней на 30пикселей. Значение 100 –это верхняя граница игрового поля игрока.
Чтобы полностью отладить работу этих циклов –необходимо устанавливать различные значения в двумерном массиве в классе game. Затем запускать,смотреть и отлаживать.
На этом программный код класса pole для второго уровня сложности закончен.Остальная работа предстоит в классе game. Отрисовка в классеpole является зеркальным отражением двумерного массива на игровом поле.
Полный программный код класса pole для второго уровня сложности, выглядит так:
//Введение цифр и букв слева и сверху от игровых полей
for (int i = 1; i <= 10; i++)
{
// Вывод цифр
gr.drawString(""+i, 73, 93+i*30);
gr.drawString(""+i, 473, 93+i*30);
// Вывод букв
gr.drawString(""+(char)('A'+i-1), 78+i*30, 93);
gr.drawString(""+(char)('A'+i-1), 478+i*30, 93);
}
}
}
Перейдем на закладкуgame.java (см. рис. 6)к классу game.
Рис. 6
Если сейчас выполнить запуск игры, то не увидим каких-либо изменений, потому что двумерный массив заполнен нулями. Перейдем в метод start()
после обнуления массива запишем значение один "1", например, в верхний левый элемент массива:
// Запуск игры - начало игры
public void start() {
//Очищаем игровое поле игрока
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
masPlay[i][j] = 0;
}
}
//Запишем единицу в верхний левый элемент массива
masPlay[0][0] = 1;
}
В результате наш массив будет выглядеть так (см. рис. 7).
Рис. 7
Мы установили однопалубный корабль в верхний левый элемент массива.
Запустим наше приложение (см. рис. 8). В результате однопалубный корабль появился на игровом поле в указанном месте.Путем подобных экспериментов можно отлаживать программный код, который отвечает за отрисовку. Подставляя нужные значения в различные элементы массива –нужно смотреть на правильность отображения корабля на игровом поле.Удалим строчку: