Принципы создания двумерных игр мы изучали на примере создания игры "Новогодний дождь".
Все эти принципы подходят и для создания игр Змейка, Морской бой,Пасьянс-Косынка.
Приемы загрузки изображений, работа с таймером, обработка событий от клавиатуры, отрисовка игрового поля, работа с графикой –всё это было продемонстрировано в игре "Новогодний дождь". Построение интерфейса пользователя, размещение кнопок и надписей, обработка событий при нажатии кнопок –всё это было изучено при создании приложений под Windows с построением интерфейса пользователя. Другими словами, все технические моменты, необходимые вам,можно найти в методической литературе по курсу Java.
Более сложная часть–это реализация алгоритма игры Змейка. Алгоритм–это точный план или схема действий, которая может привести к нужному результату. Если программист знает алгоритм, то ему остается запрограммировать его и отладить программный код. Для решения одной задачи может существовать несколько алгоритмов.Рассмотрим один из них. Для хранения информации об игровом поле можно воспользоваться двумерным массивом целых чисел. Размер игрового поля 30x30, поэтому размерность массива будет также 30x30.
//Двумерный массив для хранения игрового поля
int[][] mas;
// Создаем новый массив 30x30
mas = new int[30][30];
Решим, что свободные ячейки игрового поля будут отмечаться в массиве нулями. Для начала можно обнулить массив:
//Заполняем весь массив нулями
for (int i = 0; i < 30; i++) {
for (int j = 0; j < 30; j++) {
mas[i][j] = 0;
}
}
Клетку с объектом для поедания змейкой обозначим в массиве числом минус один: -1 (см. рис.17):
Внимание!!!Цифры на игровом поле показаны с целью демонстрации значений в двумерном массиве. Такой подход можно использовать при отладке
Рис. 17
Голову змейки обозначим в массиве числом один: 1 (см. рис. 18). Каждую последующую клетку от головы змейки будем обозначать по возрастанию числа на единицу. Получится так, что клетки змейки будут обозначены числами: 1,2,3,4,5 и т.д.(см. рис. 18), где единица –это голова змейки. При увеличении длины змейки будет добавляться еще одно число, которое на единицу больше числа в хвосте змейки.
Рис. 18
При поедании объекта змейкой на (рис. 18) к змейке добавится число пять:5, которое станет новым хвостом змейки. Таким образом,рост змейки будет происходить за счет увеличения хвоста.
Теоретически можно голову змейки обозначить числом один:1, а клетки туловища числом два: 2. Но возникнет проблема, когда змейка будет согнута полностью пополам, и две её части будут полностью прилегать друг к другу и мы не сможем определить где хвост змейки (см. рис. 19).
Рис. 19
Поэтому такой метод не подходит! В процессе отрисовки игрового поля мы будем по числу определять, что именно располагается в данной клетке.Отрисовщик будет постоянно перерисовывать игровое поле на основании данных массива.Другими словами, нам предстоит перемещать числа в двумерном массиве. Тогда игровое поле начнет менять свой внешний вид и программирование игры сведется к изменению расположения чисел в массиве.Последний сложный вопрос, который заслуживает внимания –это проблема перемещения тела змейки по игровому полю.При этом тело змейки должно проходить по пути прохождения головы змейки (см. рис. 20).
Рис. 20
Как запоминать путь движения змейки? Этот путь каждый раз изменяется и может иметь различный вид. Если тщательно подумать над этим вопросом, то можно увидеть совершенно простой выход из этой ситуации.Перемещение змейки представляет собой перемещение ее головы в одном из четырех направлений, которое на данный момент является текущим и перемещение ее хвоста.Таким образом, для перемещения змейки следует выполнять две операции:
1. Перемещать голову змейки в нужном направлении.
2. Удалять хвост змейки. Удаление хвоста равносильно записи нулевого значения в элемент массива, где находилось число, отвечающее за хвост змейки.
При таком подходе тело змейки будет автоматически проходить по нужному пути. Это и есть пример алгоритма(схемы, плана действий) для решения определенной задачи. Пока неизвестен алгоритм –бесполезно писать программный код!
Внимание!!!Далее предстоит самостоятельное создание игры Змейка на основе полученного задания и вспомогательной информации.