Сначала я нарисовал куб. Затем подумал: «А давайте загружать карту». Получился лабиринт. А давайте добавим панели! А давайте добавим фаерболы! А как же без вида от третьего лица? А где же мультиплеер?! Так и появилась игра 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 — расстояние, на которое будут улетать шары. <первая задержка> — параметр, позволяющий сделать сдвиг шаров вдоль направления их полета.
- Hpanel: H x y <первая задержка> <первый интервал> <второй интервал> <начальное состояние (0/1)>
- После этого задаются текстуры. Все текстуры лежат в папке Textures. Указывается количество текстур, потом названия объектов и названия картинок. Допустимые объекты:
- sky
- wall
- exit
- floor
- danger
- hidden
- moving
Файлы с уровнями хранятся в папке Levels. Количество уровней хранится в файле «param.walk», который восстанавливается после удаления с правильным числом. Уровни следует нумеровать с единицы. В опубликованной версии 13 уровней.
Я научился:
- Программировать на C++
- Писать проекты на QT
- Работать с OpenGL
- Работать с сетью
- Писать многопоточные приложения
- Работать с матрицами
А также:
- Понял как устроена скелетная анимация
- Попробовал поработать с GIT
- И получил очень важный урок:
Надо думать над тем, что будет в итоге перед тем как садиться писать. Так, из-за того что графика и рассчеты были в одном классе, мне пришлось изрядно потрудиться для того, чтобы разнести их в разные классы и запустить в отдельных потоках.
Чего мое, чего не мое...
Я не использовал готовые движки. Однако текстуры и модельки не мои. Модель взята из Half-life. Если кто-то не узнал героя, это — Барни.
Игра
Автор: danpol