Pull to refresh

Walkers: The game of walkers

Reading time3 min
Views10K
Сначала я нарисовал куб. Затем подумал: «А давайте загружать карту». Получился лабиринт. А давайте добавим панели! А давайте добавим фаерболы! А как же без вида от третьего лица? А где же мультиплеер?! Так и появилась игра 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 &ltпервая задержка&gt &ltпервый интервал&gt &ltвторой интервал&gt &ltначальное состояние (0/1)&gt
      Схема ее работы такая: сначала в течении &ltпервой задержки&gt будет &ltначальное состояние&gt, потом состояние сменится на &ltпервый интервал&gt, потом изменится на &ltвторой интервал&gt. После этого будет происходить чередование &ltпервого интервала&gt и &ltвторого интервала&gt.
    • Mpanel: M x y <время на прохождение одной клетки> &ltPARAM&gt
      &ltPARAM&gt — строка, описывающая передвижение панели. Допустимые символы — S (stay), UDLR (up, down, left, right). Важно помнить, что строка будет обрабатываться циклически. После обработки последнего символа строки положение панели сделается равным (x, y)!
    • Fpanel: F &ltx*100&gt &lty*100&gt &ltz*100&gt &ltr*100&gt &ltDIR&gt &ltвремя на прохождение одной клетки&gt &ltcooldown&gt &ltdistance*100&gt &ltпервая задержка&gt &ltsx * 100&gt &ltsy * 100&gt &ltsz * 100&gt.
      Положение лаунчера фаерболов задается числами x, y, z. В параметрах необходимо указать эти числа, умноженные на 100. Все численные параметры обязаны быть целыми. r — радиус фаербола. &ltDIR&gt — направление (UDLR). &ltcooldown&gt — промежуток между запусками. sx, sy, sz — масштабирование шаров. Это позволяет запускать эллипсоиды. distanсe — расстояние, на которое будут улетать шары. &ltпервая задержка&gt — параметр, позволяющий сделать сдвиг шаров вдоль направления их полета.
  • После этого задаются текстуры. Все текстуры лежат в папке Textures. Указывается количество текстур, потом названия объектов и названия картинок. Допустимые объекты:
    • sky
    • wall
    • exit
    • floor
    • danger
    • hidden
    • moving

Файлы с уровнями хранятся в папке Levels. Количество уровней хранится в файле «param.walk», который восстанавливается после удаления с правильным числом. Уровни следует нумеровать с единицы. В опубликованной версии 13 уровней.



Я научился:


  • Программировать на C++
  • Писать проекты на Qt
  • Работать с OpenGL
  • Работать с сетью
  • Писать многопоточные приложения
  • Работать с матрицами
А также:
  • Понял как устроена скелетная анимация
  • Попробовал поработать с Git
  • И получил очень важный урок:
    Надо думать над тем, что будет в итоге перед тем как садиться писать. Так, из-за того что графика и рассчеты были в одном классе, мне пришлось изрядно потрудиться для того, чтобы разнести их в разные классы и запустить в отдельных потоках.

Что мое, что не мое...


Я не использовал готовые движки. Однако текстуры и модельки не мои. Модель взята из Half-life. Если кто-то не узнал героя, это — Барни.

Игра


Исходники
Linux
Windows
Tags:
Hubs:
+43
Comments27

Articles