ДонНТУ   Портал магистров

Разработка игры "Пятнашки" на actionscript 3.0

Я расскажу Вам о том, как написать игру «Пятнашки» на actionscript 3.0. Почему я решила написать об этом на сайте магистров? Я хочу показать другим, что написать первую игру не так сложно, как кажется многим.

Я давно хотела написать что-то для сайта newgrounds.com. Он является одним из основных сайтов для творчества на Adobe Flash, ежегодно проводит фестивали аниматоров. Сайт знаменит тем, что был один из первых с автоматической фильтрацией нового содержимого, т.е. пользователи голосуют за новые игры и в зависимости от результатов голосования, такой себе контроль «качества». Твердо решив сделать вклад в общество, которое неоднократно радовало и удивляло меня отличными работами, я начала оценивать свои силы. Со школой рисования в детстве как-то не сложилось, поэтому в игре должна быть очень простая графика. Однако даже самая простая игра мечтает стать популярной и раскрученной, яркий пример тому Super Meat Boy. Зарожденный игрой на flash, он проделал долгий путь до инди-хита на PC, Mac и XBox. Есть и примеры попроще, когда игры позже портировались на мобильные платформы, например Canabalt или Sushi cat. Таким образом, если игра станет популярной, ее можно портировать на другие платформы. С мобильными телефонами вышел казус, оказалось что Flash там проигрывается далеко не всегда, однако Actionscript и JavaScript – это один и тот же ECMAScript в основе, так что для современных мобильных телефонов можно было подумать над HTML5 версией. Просмотрев работы других я думала: «Почему бы не написать что-то своё?» Многие работы на сайте выглядели не очень, но у них были свои поклонники и рейтинг 3/5. А некоторые были безупречными, эталоном, к которому нужно стремиться, с потрясающей графикой, музыкой, задумкой, но с не намного большим рейтингом. Когда я начала писать «Пятшашки» (а это было в 2010 году), мне хотелось выложить в интернет игру, которую не забанят по причине низкого рейтинга. Но идея с «Пятнашками» не нова, ее придумали еще в далеком 18 веке. Да и реализаций этой игры в интернете бесконечное множество. В первую очередь я столкнулась с проблемой нерешаемости паззла, если последние 2 квадратика поменяны местами. Чтобы исключить эти комбинации нужно было написать особый алгоритм перемешивания, генерация случайных чисел не имела к нему никакого отношения. Поле было 4х4. Квадратики перемешивались и пользователю предлагалось собрать пазл, чтобы числа на квадратах шли по порядку. Но в игру было интересно играть только первые несколько раз и все уже существующие игры на этой основе работали точно так же. Там отсутствовало какое-либо развитие/усложнение, в игре не было четкого начала и конца. Идея написать игру отложилась на пару лет.

В 2012 к разработке подключился мой брат и я решила всё-таки довести дело до конца и выложить игру на сайт. Мы придумали как сделать развитие в пазле. От пользователя требовалось не просто собрать пазл, а сделать это за минимальное количество ходов. Кстати само минимальное количество ходов из текущей комбинации тоже показывалось пользователю, чтобы он мог проверять правильность пути. Результат превзошел все ожидания – у игры прекрасно увеличивалась сложность, настолько круто, что до 20го уровня я так и не смогла дойти. Нужно было перебрать все возможные комбинации перемешивания, найти к ним решения и группировать их в уровни по количеству ходов. Сделать это для поля 4х4 оказалось непосильной задачей. Задача является NP-полной. На ее решение потребуются месяцы и 20 Тб свободного места на диске. Поэтому пятнашки пришлось сократить до 3х3. Решения для 3х3 занимали приемлемый объем памяти, приложение можно было выложить в интернет с полностью встроенными решениями. Для создания решений была написана отдельная программа на С++, которая считала минимальное количество ходов по алгоритму А*, после чего сохраняла файл с решениями, который и попадал в Flash как встроенный файл. Максимальное количество ходов в игре оказалось 31. Хотя на самом деле самая высокая сложность получается на уровнях 22-28. Это связано с тем, что на это количество ходов попадает больше всего комбинаций, их миллионы! А на 31 ход их всего 2. Имея карандаш с ручкой, можно незамедлительно пройти уровень методом проб и ошибок, записывая все свои ходы. Когда я выложила игру на newgrounds, пользователи начали неплохо о ней отзываться. Как ни странно, но пазл пришелся по душе многим поклонникам пазлов. Несмотря на то, что графика у нас была без изяществ, основанная на геометрических примитивах(рисовать, к сожалению, никто из нас не умел), а звуки были взяты с freesound.org, людям понравилась игра. Более десятка людей ее даже прошли от начала до конца. К игре был подключен newgrounds API. Теперь в ней можно было зарабатывать медали за прохождение. Медалей было 8. Самое интересное, я сама смогла открыть только 4. Очень приятно что есть игроки, которые открыли все 8. За период времени с января 2013 до июня игра набрала около 4000 просмотров.


Рисунок 1 - Скриншот из моей первой игры 8-puzzle

Проанализировав первую игру, все ее достоинства и недостатки, я пришла к выводу, что у игры должно быть продолжение. Основными недостатками игры были:

Было решено написать еще одну игру, посвященную идее пятнашкам, но с немного другими правилами игры.

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

Рисунок 2 - Скриншот из новой игры 8-puzzle: hex

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

Но не все так гладко и радужно в написании игр на flash, я приведу ниже несколько решений:

  1. Чем собирать Flash?
  2. Лучше всего использовать Adobe Flash, но им дают попользоваться всего неделю, потом нужно по-хорошему покупать(информация устарела, это было еще до Creative Cloud c подпиской).

    Для тех кто упустил этот шанс, Flex SDK можно скачать бесплатно, а в качестве IDE использовать FlashDevelop. AdobeFlash Player c Debug тоже свободно скачивается.

  3. Как добавить в Flash звуки?
  4. Для начала надо их откуда-то взять или самим записать. Я брала их с freesound.org, чтобы что-то скачать, там нужно зарегистрироваться, но с этим все просто. Дальше сложнее – Flash умеет воспроизводить .mp3, однако практически все программы, умеющие кодировать в mp3 стоят денег. Кроме того, звуки должны быть очень сильно сжаты вплоть до 64-48Кбит/с. У Flash игрушек с этим беда, даже в таком формате особо много звуков и музыки не наберешь, надо импровизировать. Решение для обработки звука было найдено – это Audacity + LAME encoder.

  5. Как добавить в Flash графику?
  6. С графикой проще. Растровые картинки (.png, .jpg) удобно рисовать в GIMP, а векторные (.svg) в InkScape. Увы для отображения SVG нужен 3й Flex SDK, т.к. в новом поддержку сломали в пользу спец. формата Adobe

  7. Как выложить игру на сайт, добавить рекламные баннеры и монетизировать?
  8. Не скажу :) Читайте на сайте. У newgrounds есть wiki где все расписано.


    Итого – игра делается с использованием бесплатного ПО с открытым кодом.