Дипломный проект


О создании игр и получении высшего образования обычно говорят как о вещах несовместимых, часто вполне справедливо. Многие известные инди-разработчики бросали универы. Я же расскажу о противоположном опыте. О своём довольно необычном проекте и о том, как удалось совместить приятное с полезным.

Я учился в РГГУ на прикладной информатике и параллельно занимался своим хобби. И вот, когда пришло время выбрать тему выпускной квалификационной работы, подумал: «Зачем ломать голову над её выбором и писать какую-то левую программу, когда уже есть практически готовый проект: моя первая игра-головоломка».

Дело оставалось за тем, чтобы описать в научном ключе процесс разработки и донести до доцентов и профессоров очень даже абстрактную идею игры. Не обошлось без представлений: делал презентации, видеообзоры, показывал прототип, отчитывался перед научным руководителем, что я ещё жив и в деле. Но надо отдать им должное и сказать спасибо, за поддержку нестандартной инициативы.

В итоге, материала, полученного во время разработки, хватило, чтобы написать уникальный диплом (0% плагиата) полностью из головы и своего опыта.

Изначально моя тема была «Разработка логической видеоигры на геометрических принципах». Позже (в соответствии со стандартами ISO/IEC) слово «разработка» заменено на «проектирование», что больше согласуется с текстом работы.

Об игре


Моя игра – не имеющая аналогов комбинаторная головоломка для Android.



Цель игры: преобразовать одну фигуру так, чтобы она стала точно такой же как вторая.

В игре есть три режима.
В «Режиме преобразований» формы изменяются нажатиями на кнопки.



В «Режиме вращений» имитируются трёхмерные повороты.



Усложнённый «Спортивный режим» объединяет в себе два предыдущих и предназначен для игры на рекорд.



Также есть интерактивная коллекция фигур, которая пополняется по мере прохождения.

Предпосылки


Развитию игровой концепции способствовало моё давнее увлечение, заключающееся в построении фигур из множества кубов. От набросков на полях тетради я пришел к более сложным формам. Последние рисунки от руки, эти фракталы:



Навык изображения перекрывающихся граней и натренированное пространственное мышление послужили созданию новых фигур, состоящих из треугольников. Так выглядели ранние концепт-арты нарисованные в CorelDRAW (ещё не в изометрической проекции) и одна из 3D-моделей в Blender:



Позже от трёхмерной графики я отказался в пользу векторной анимации в Anime Studio Pro. На основе составленной иерархии фигур и анимаций переходов между ними было решено сделать головоломку.

Логика


Логика игры связана с несколькими интересными геометрическими фигурами. Так, траектории движения треугольников проходят параллельно рёбрам воображаемой звёздчатой формы кубооктаэдра и вдоль прямых, пролегающих через её центр и пересечения рёбер.



А графы логики первого игрового режима (преобразований) – гиперкубы. Сначала конфигурации взаимосвязаны как вершины 2-куба (квадрата). С каждым прохождением добавляется новое пространство фигур. При следующем старте логика уже 3D куб, потом – тессеракт и, наконец, пентеракт с сечением-тессерактом.



Режим вращений имеет свою логику, благодаря которой всего пара анимаций поворотов для каждой фигуры обеспечивает видимость вращения по четырём направлениям и три степени развёрнутости.



Реализация


Итак, раскрою секрет, как я программно воплотил геймдизайн. Это можно сформулировать так: сложная система – простая реализация.

Под простой реализацией подразумевается применение для проектирования конструктора 2D игр Construct 2. В моём случае его использование, имея некоторые свои минусы, тем не менее позволило сэкономить время и сосредоточится больше на творчестве.

Описанную выше «гиперлогику» я представил в виде леса полных бинарных деревьев и реализовал линейно в конструкторе с помощью вложенных событий. Во избежание конфликтов между действиями ввёл блокирующие переменные.

Оптимизация


Учитывая наличие огромного числа анимаций в игре (около 500), остро встал вопрос оптимизации. Специфическое улучшение «кода» в Construct 2 затрагивать не буду, а скажу о более общей оптимизации графической составляющей. Для минимизации потребления системных ресурсов понадобились:

  • композиция спрайтов (благодаря симметричности, фигуры можно разрезать на части и сложить из копий экземпляров спрайтов по типу мозайки);
  • обрезка пустых краёв изображений (это существенно при большом количестве картинок);
  • реверс анимации (вместо создания отдельной анимации с обратным порядком кадров, лучше реверсировать существующую);
  • понижение частоты кадров до 12 fps и уменьшение разрешения промежуточных кадров анимации;
  • использование 8-битных цветов (такая глубина цвета абсолютно незаметна из-за особенностей палитры игры).

Картинки: тессеракт, пентеракт, звёздчатый кубооктаэдр взяты из Википедии.

Комментарии (15)


  1. Shust_Ivan
    09.01.2019 17:01

    Почему отказались от 3D графики? Ведь существует замечательный three.js, на котором реализовать Вашу идею вполне легко и быстро(правда в таком случае у Вас получилась бы браузерная игра). К тому же это придало бы зрелищности благодаря OrbitControls, с помощью которого пользователь мог бы вращать модельки.


  1. SadOcean
    09.01.2019 18:06

    Выглядят впечатляюще, очень симпатично.
    И для дипломного проекта хорошо.
    А вот реализация странная.
    Действительно напрашивается использование 3д графики — учитывая количество элементов, странно ожидать проблем с производительностью


  1. EndUser
    09.01.2019 19:51

    Как я убил двух зайцев первым блином

    «Как как?» — отравил!


  1. tivita
    09.01.2019 23:39

    А поиграть в нее где?


    1. RomanOvanenko Автор
      10.01.2019 00:57

      Игра есть в маркете. По правилам Хабра не могу сказать её название или дать ссылку. Но я везде подписываюсь своим собственным именем.


      1. Sartor
        10.01.2019 16:26
        +2

        Может быть это ГиперКалейдоскоп? Не уверен. Все возможные совпадения случайны.


        1. RomanOvanenko Автор
          10.01.2019 17:13
          +1

          Вполне вероятно.


  1. SDKiller
    10.01.2019 06:22

    Увидел фигуры — вспомнилась игрушка "калейдоскоп" из далекого советского детства.


    1. RomanOvanenko Автор
      10.01.2019 17:30

      Действительно, фигуры внешне напоминают эту механическую игрушку и, более того, они обладают такой же симметрией как классический оптический калейдоскоп с тремя зеркалами.


  1. LeshaVH
    10.01.2019 13:21

    Очень слабое учебное заведение — раз за игру (причем достаточно простую и копирующую гемдизайн нескольких других) дают диплом…


    1. alexdevyatov
      10.01.2019 15:11
      +1

      Работа выполнена качественно, выложена в маркет, ей пользуются люди. Вполне заслуженный диплом.
      В моем вузе диплом на отлично защищали ребята с красиво оформленной презентацией и неработающим программным кодом.


    1. Goldseeker
      11.01.2019 01:02

      Вы, таки, издеваетесь, если за игру не давать программистский диплом, то за что же давать?


  1. svkozlov
    10.01.2019 17:35

    А вы уверены что ваши рисунки от руки — это фракталы?


    1. RomanOvanenko Автор
      10.01.2019 17:59
      +1

      Да, это самоподобные фигуры — фракталы.
      Первый — это третья итерация одного из трёхмерных аналогов снежинки Коха.

      Определение второго точно не скажу, но его грани похожи на треугольники Серпинского.


    1. SadOcean
      11.01.2019 13:52

      Конечно фракталы, просто с ограничением в глубину.
      С ними такое случается, если пытаешься их отобразить.