Продолжим упражняться в написании игр. Вспомним, что уже делалось: 5K Tetris, Robots, Сапёр, Питон на Питоне. Во всех этих играх, хотя они работают по разным алгоритмам, пространство было представлено одинаково: в виде матрицы квадратных клеток. Действующими лицами являются: фигура Тетриса, безымянный беглец от роботов и роботы, Питон, и в Сапёре даже нет героя – мы просто открываем клетки мышкой.
Все эти герои привязаны к своему пространству:
- Они могут перемещаться только дискретно из клетки в клетку
- Они являются содержимым клетки, то есть сама клетка имеет свойство – есть в ней герой или нет. Если он там есть, там не может быть ничего другого.
Ну и конечно, графика оставляет желать лучшего – они выглядят просто квадратами (ну ладно, у Питона есть ещё глаза).
Возьмёмся за что-то более сложное. А именно, чтобы герой мог двигаться не только из клетки в клетку и не только двигаться, а делать что-то ещё. И чтобы он как-то более интересно выглядел.
Для этого подойдёт жанр платформера. Интернет сообщает, что начался он с игры Donkey Kong:
Суть жанра в том, что в игре есть платформы, то есть некие площадки, которые имеют разную высоту, и персонаж бегает по ним и перепрыгивает с одной на другую.
Элементы платформинга развивались и достигли своего апогея в серии игр "Принц Персии". К прыжкам добавились отскоки от стен, кувырки, цепляние за стены, бег по стенам, кручение на шесте, висение на канате и т.д. Сейчас редкая экшен-игра обходится совсем без платформинга – он есть даже в Doom Eternal.
К сожалению, мы пока не сможем сделать игру, подобную "Принцу Персии" в трёхмерном мире. Вместо этого обратимся к классике:
Мы не будем копировать Марио, но просто рассмотрим общие принципы двумерной игры-платформера:
- Пространство по-прежнему представлено клетками, которые могут быть заполненными или незаполненными
- Заполненные клетки это собственно платформы, то есть опора, по которой можно ходить. Они отображаются на экране как земля, кирпичная кладка, камни и т.п.
- Персонаж существует отдельно от клеток. Он не обязан заполнять собой какую-то конкретную клетку. Он может свободно перемещаться по всему свободному пространству уровня. Он может совершать прыжки, кувырки и другие действия.
- Как правило, на уровне присутствуют враги и активные элементы: движущиеся платформы, ловушки, падающие полы и т.п. Всё это взаимодействует с персонажем.
По сути от "нормального" игрового уровня с построенными на нём произвольными домами, деревьями и т.п. нас отделяет только одно – вся местность в нём выровнена по границам клеток и будто бы составлена из кубиков. Когда-нибудь преодолеем и этот недостаток, а пока – платформеры это вещь в себе, так что квадратность им не мешает. Из-за сочетания простоты и довольно широких рамок геймплея и дизайна платформеры стали любимым жанром инди-разработчиков:
План на разработку
Сначала не будем делать никакого дизайна, а просто отработаем алгоритмы движения, прыжков, столкновений с помощью обычных квадратиков. Когда всё это будет работать, можно будет заняться дизайном.
Писать будем на языке C и дублировать на JavaScript. На C, потому что в дальнейшем может понадобиться всё быстродействие, которое есть, а на JavaScript – чтобы наблюдать промежуточные результаты непосредственно в браузере.
В следующей части отработаем: перемещение персонажа влево-вправо и прыжок. Кроме того, у нас появится гравитация.