Приемы загрузки изображений, работа с таймером отрисовки,отрисовка игрового поля, работа с графикой–для игры"Морской бой" реализуется также как и для игры "Змейка". Такие же приемы были использованы при создании игры "Новогодний дождь". Построение интерфейса пользователя, размещение кнопок, обработка событий при нажатии кнопок – всё это было изучено при создании приложений под Windows с построением интерфейса пользователя. В отличие от игры "Змейка", управление игрой будет полностью осуществляться с помощью мыши. Работа с мышью была рассмотрена при создании приложения для рисования. Все технические моменты можно найти в методической литературе по курсу Java.
Алгоритм для реализации игры "Морской бой"
Основная часть работы–это реализация алгоритма игры "Морской бой".Для решения задачи можно найти несколько различных алгоритмов ее решения. Другими словами, несколько планов (схем)действий.
Для хранения информации о двух игровых полях можно воспользоваться двумя двумерными массивами целых чисел. Размер одного игрового поля 10x10, поэтому размерность каждого массива будет также 10x10. Один массив будет хранить данные игрового поля компьютера, а другой игрока.
// Массив для игрового поля компьютера
int[][] masComp;
// Массив для игрового поля игрока
int[][] masPlay;
//Создаем массив 10x10 - игровое поле компьютера
masComp = new int[10][10];
//Создаем массив 10x10 - игровое поле игрока
masPlay = new int[10][10];
Решим, что свободные ячейки игровых полей будут отмечаться в массиве нулями. Поэтому при старте игры оба массива буду обнуляться:
//Очищаем игровое поле компьютера и игрока
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
masComp[i][j] = 0;
masPlay[i][j] = 0;
}
}
Все данные игровых полей будут храниться в массивах. Различные варианты состояния игрового поля мы будем отмечать отдельным числом.
Один из вариантов выглядит так:
· Число один 1:палуба однопалубного корабля
· Число два 2:каждая палуба двухпалубного корабля
· Число три 3:каждая палуба трехпалубного корабля
· Число четыре 4:каждая палуба четырехпалубного корабля
· При выстреле в определенную ячейку к ее значению будет прибавляться число семь7
· Пространство вокруг корабля будет обозначаться числом минус один -1, в это пространство нельзя поставить другой корабль
· Когда корабль будет полностью подбит ко всем значениям его ячеек будем прибавлять еще одно число семь 7
К примеру, начальное расположение кораблей выглядит так (см. рис. 20).
Рис. 20
На основании предложенной схемы –значения в двумерном массиве будут выглядеть так (см. рис.21).
Рис. 21
Сравните вид игрового поля на (см. рис. 20) и его отображение в двумерном массиве (см. рис. 21). Все палубы кораблей отмечены значениями: 1,2,3,4, пространство вокруг отмечено минус единицей -1, а все свободные ячейки заполнены нулями0. Таймер отрисовки будет постоянно отрисовывать игровое поле на основании чисел в массиве и программирование логики игры сведется к программированию двумерного массива.Общий подход к созданию игры "Морской бой"полностью совпадает с подходом к созданию игры "Змейка".
При выстреле в любую ячейку прибавляем к ее значению число семь7.
После двух выстрелов по игровому полю оно станет выглядеть так(см. рис. 22). Один выстрел попал и ранил четырехпалубный корабль, а другой выстрел попал мимо (см. рис. 22).
Рис. 22
Теперь посмотрим на изменения в двумерном массиве (см. рис. 23), которое соответствует двум выстрелам. К двум значениям элементов массива прибавилось число семь 7.
Рис. 23
После того как корабль будет полностью подбит ко всем значениям его ячеек прибавляем снова число семь7. Так выглядит игровое поле после трех дополнительных выстрелов, попавших в три палубы четырехпалубного корабля (см. рис. 24).
Рис. 24
Изменения, которые произошли в двухмерном массиве выглядят так (см. рис. 25)
Рис. 25
После четвертого попадания в четырехпалубный корабль значения в ячейках будут 11(4+7) (см. рис.26). После полного уничтожения корабля мы прибавляем ко всем подбитым палубам еще раз число 7, тем самым помечаем, что это палубы полностью убитого корабля. В результате получаем состояние двумерного массива(см. рис. 25).
Рис. 26
Подход, который рассмотрен выше не является единственным и вы можете использовать свой вариант!