Сначала я нарисовал куб. Затем подумал: «А давайте загружать карту». Получился лабиринт. А давайте добавим панели! А давайте добавим фаерболы! А как же без вида от третьего лица? А где же мультиплеер?! Так и появилась игра Walkers
Видео
Об игре
Как известно, каждый программист должен написать игру и чатик. В итоге я сделал и то, и то. Однако под «чатиком» я понял добавление мультиплеера. В итоге получилась более-менее серьезная игра, которую я и хочу сейчас показать.
Walkers. QT + OpenGL + (многопоточность + сеть + анимация)
Управление
WASD — перевижение Стрелочки — вращение камеры (в полноэкранном режиме можно использовать мышь) Shift — приседать Space — прыгать В главном меню можно посмотреть наверх, чтобы увидеть рекорды.
Как задается уровень
Сначала указывается количество строк и столбцов (N, M).
Затем N строк по M символов задают статическую карту.
'.' — пол
'E' — финиш
'0' — опасность (лава / вода / ...)
'*' — стена
'P' — начальная позиция игрока. Если символа 'P' нет, то начальной позицией считается позиция (0, 0)
После этого идет количество подвижных объектов и их описание.
Подвижные объекты бывают 3 типов: Hpanel — периодически исчезающая панель, Mpanel — движущаяся панель, Fpanel — фаерболы.
Hpanel: H x y <первая задержка> <первый интервал> <второй интервал> <начальное состояние (0/1)> Схема ее работы такая: сначала в течении <первой задержки> будет <начальное состояние>, потом состояние сменится на <первый интервал>, потом изменится на <второй интервал>. После этого будет происходить чередование <первого интервала> и <второго интервала>.
Mpanel: M x y <время на прохождение одной клетки> <PARAM> <PARAM> — строка, описывающая передвижение панели. Допустимые символы — S (stay), UDLR (up, down, left, right). Важно помнить, что строка будет обрабатываться циклически. После обработки последнего символа строки положение панели сделается равным (x, y)!
Fpanel: F <x*100> <y*100> <z*100> <r*100> <DIR> <время на прохождение одной клетки> <cooldown> <distance*100> <первая задержка> <sx * 100> <sy * 100> <sz * 100>. Положение лаунчера фаерболов задается числами x, y, z. В параметрах необходимо указать эти числа, умноженные на 100. Все численные параметры обязаны быть целыми. r — радиус фаербола. <DIR> — направление (UDLR). <cooldown> — промежуток между запусками. sx, sy, sz — масштабирование шаров. Это позволяет запускать эллипсоиды. distanсe — расстояние, на которое будут улетать шары. <первая задержка> — параметр, позволяющий сделать сдвиг шаров вдоль направления их полета.
После этого задаются текстуры. Все текстуры лежат в папке Textures. Указывается количество текстур, потом названия объектов и названия картинок. Допустимые объекты:
sky
wall
exit
floor
danger
hidden
moving
Файлы с уровнями хранятся в папке Levels. Количество уровней хранится в файле «param.walk», который восстанавливается после удаления с правильным числом. Уровни следует нумеровать с единицы. В опубликованной версии 13 уровней.
Я научился:
Программировать на C++
Писать проекты на QT
Работать с OpenGL
Работать с сетью
Писать многопоточные приложения
Работать с матрицами
А также:
Понял как устроена скелетная анимация
Попробовал поработать с GIT
И получил очень важный урок: Надо думать над тем, что будет в итоге перед тем как садиться писать. Так, из-за того что графика и рассчеты были в одном классе, мне пришлось изрядно потрудиться для того, чтобы разнести их в разные классы и запустить в отдельных потоках.
Чего мое, чего не мое...
Я не использовал готовые движки. Однако текстуры и модельки не мои. Модель взята из Half-life. Если кто-то не узнал героя, это — Барни.