Walkers: The game of walkers

Сначала я нарисовал куб. Затем подумал: «А давайте загружать карту». Получился лабиринт. А давайте добавим панели! А давайте добавим фаерболы! А как же без вида от третьего лица? А где же мультиплеер?! Так и появилась игра 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. Если кто-то не узнал героя, это — Барни.

Игра


Исходники
Linux
Windows

Similar posts

AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 27

    +28
    Надо было назвать игру HL3: Episode One с исходниками linux и маркетологический успех обеспечен…
      0
      наверное надо было публиковать в «Я пиарюсь»
        0
        Но ведь коммерческой выгоды-то нет
          0
          «Я пиарюсь» скорее для коммерческих проектов, а не свободных игр.
            0
            понятно, не знал, я совсем не давно на хабре :)
              0
              судя по вашему профилю — с декабря 2011 года, т.е. уже довольно давно.
                +1
                в смысле не давно начал публиковаться, правила только недавно прочитал )
            +1
            Ну хоть просчёт столкновений есть.
            • UFO just landed and posted this here
              • UFO just landed and posted this here
                • UFO just landed and posted this here
                    0
                    Буду рад почитать!
                      0
                      На кватернионах, видимо?
                    +2
                    А почему OpenGL 1, как будто оперативной памяти у карты нету?
                      0
                      Я изначально не планировал писать игру, поэтому начал с того, что первое попалось под руку. Поэтому OpenGL 1.
                      +9
                      Я думаю, что много кто из программистов хотя бы начинал писать свою игру. Но не думаю, что многим удалось довести дело до конца. Это заслуживает уважения.
                        0
                        Такой получился russian portal.
                          +1
                          Ни по описанию, ни по видео не понял, в чем суть игры? Много человек одновременно бегут по уровню на скорость?
                            0
                            В мультиплеере — да. А в синглплеере ты соревнуешься со своим лучшем прохождением.
                            +4
                            Half-Life DeFrag ^_^
                              +10
                              Интересно как быстро появится на Хабре рубрика «Я глумлюсь?» :)
                              А если серьезно: странная статья, вроде про разработку а перечислены в осном личные достижения и реализованные фишки.
                              Ни особенностей реализации, ни основные проблем\затыков не раскрыто.

                                0
                                Получился DeathRun. Это такой тип карт для CS, старых, если кто не знал, где нужно добежать до фиинша и не умереть при этом =).
                                  0
                                  Прошел игру ) 9 место пишет.
                                  +1
                                  Я когда-то тоже писал бегалку. Вот, можете глянуть: ссылка. Осторожно, опасно для психики!
                                    +3
                                    Запустил. Чёрный экран, шинда намертво зависла. Спасибо, бро.
                                      0
                                      Очень круто. Особенно понравилась музыка)
                                      0
                                      Когда-то очень сильно горел идеей сделать крутую тридэ-игру, но после порождения нескольких зародышей движков как-то перегорел. На тот момент пришло осознание, что маловато опыта и знаний технологий — может быть когда-нибудь продолжу с новыми силами :)
                                      Спасибо за мотивирующую статью, но подробностей интересных и вправду маловато.

                                      Only users with full accounts can post comments. Log in, please.