Гибрид матч-3 и словесной игры: что получится?

 ​
 ​

Предисловие

Мое хобби — разработка игр для iOS. Создаю игры с помощью фреймворка SpriteKit на языке Swift. В основном, в жанре "Словесные". Почти все основные паттерны таких игр я уже испробовал и настало время поэкспериментировать с форматом.

Эта статья — описание разработки самой масштабной игры, которую я делал.

Идея и базовая концепция

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

Для начала надо определится с основной механикой и проверить ее в действии. Основная механики моей игры — перемещение рядов и столбцов с фишками (блоки с буквами) на игровом поле.

Перемещать нужно таким образом, чтобы получались слова длинней 3 букв (у нас матч-3 же!). Каждое перемещение = 1 ход.

Чтобы пройти уровень, необходимо набрать определенное кол-во очков. Игрок ограничен по числу ходов на уровень.

​Минимальное представление механики — двигаешь строку/столбик и что-то где-то (пока ещё что-то и где-то) собирается. 

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

Но я решил сделать немного по-другому и реализовать концепцию перемещения столбцов и строк. После перемещения один блок в столбце/строке исчезает и на другой стороне появляется новый. На месте собранных слов появляются новые блоки с буквами.

Правильнее всего было бы сделать полный ресерч рынка и найти матч-3 игры с похожей механикой, но легкие пути не для меня. Из словесного жанра, что я мониторю, похожих механик я не находил.

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

Разработка

Реализовал базовое перемещение. Проверки на состояние поля пока еще нет. Слова собираются автоматически во все стороны (слева-направо, справа-налево, сверху-вниз, снизу-вверх).

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

Гибрид матч-3 и словесной игры: что получится?

Попытался создать первого врага-монстра. Но все мои попытки были безуспешны, поэтому иллюстрация первого монстра была приобретена в магазине Adobe. Остальных монстров, их анимации и фоны делал сам.

Так же добавил стандартную для жанра механику вычитания и добавления ходов — за сбор специальных блоков. При сборе блоков с бомбами кол-во ходов уменьшается, при сборе блоков с часами, ходы добавляются.

​Анимации на этом этапе сильно кривые, чтобы показывать их гифками
​Анимации на этом этапе сильно кривые, чтобы показывать их гифками

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

Переделал сбор слов. Теперь только слева-направо и сверху-вниз. Добавил партиклы и наглядное начисление очков при сборе. Блок с часами (+ ходы) заменил на блок с медалькой.

Немного технической части. После добавления анимации проверил производительность. Игра в тот момент отъедала 40% процессора на старших моделях и 100% на младших.

Анимация съедала "всего" 10 процентов, тогда как все блоки на поле (более 100 штук) ели все остальное. Решение оказалось простое — нужно внимательно читать документацию и использовать правильный тип нодов. В моем случае мне нужно было использовать SKEffectNode для самих фишек.

Экран проигрыша отличается только текстом и картинкой сверху​
Экран проигрыша отличается только текстом и картинкой сверху​

Добавил экран проигрыша и выигрыша. Сделал главное меню. Начал делать систему уровней и рисовать остальных монстров.

Из-за того, что раньше все мои игры использовали стандартные примитивы, этот процесс занял очень много времени. Но за пару уроков по Illustrator`у и After Effects`у можно научиться делать простую, но приятную графику и базово ее анимировать.

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

Эмоджи ломают, но штож поделать, это можно пережить

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

Разные размеры поля​
Разные размеры поля​

Изначально планировал сделать 40 уровней, разделенных на 4 темы. В итоге получилось 32 уровня по 3 темы. 32 уровень бесконечный — после него не появляются новые механики.

Начиная с 9 уровня поле меняет свой размер каждый раз — от 3х3 до 5х5 с разными вариациями (4х3, 4х5 и т.д.).

​Блок буквы
​Блок буквы

На 11 уровне появляется новая механика — каждый уровень происходит блокировка одной из букв. Эта буква больше не появляется на поле в течении этого уровня. Вместо нее дропается блок с замком. При сборе (3 и более блоков) ничего не происходит, блоки просто остаются на поле.

Сначала блокируются менее встречающиеся буквы, по мере продвижения игрока к 32 уровню блокируются более распространенные. Буква, которая блокируется на уровне выводится в окно слева вверху экрана.

Лавина!

На 21 уровне открывается последняя механика. При сборе слова/бомб/медалек ряды/столбцы с краю поля перемешаются против часовой стрелки. Из-за этого возникает классный лавинный эффект как в классических матч-3 играх. Т.е. собирается одно слово => поле крутится => из-за этого собирается еще одно слово => поле крутится ...

Экспериментировал с этой механикой — делал перемещение каждый раз, когда пользователь двигает столбец/строку, но получается чересчур сумбурно.

Гибрид матч-3 и словесной игры: что получится?

В конце, как и в любом своей проекте, сделал локализацию на английский язык, добавил AdMob для показа рекламы, Flurry для отслеживания действий игрока. И таблицу лидеров, которая реализована через Firebase Database.

Итого

Всего разработка игры заняла 90 часов. У игры существует проблема с балансом, который будет исправлен после сбора статистических показателей. Поворотная механика вносит существенное разнообразие в игру и игроки могут играть бесконечно.

Если в игре будет хороший прирост пользователей в совокупности с длинной сессии/ретеншеном , то можно будет реализовывать дополнительные механики (коих великое множество) и еще больше уровней. Существующего геймплея должно хватит чтобы понять, нужно ли развивать игру дальше. Но уже сейчас 32-ой бесконечный уровень играется очень бодро.

А как думаете вы? Приветствую любые предложения и пожелания, отвечу на все вопросы.

44 показа
1.1K1.1K открытий
10 комментариев

Мб пригодиться, когда нужна будет идея для очередной игры, есть бородатая игра с game boy advance с необычной механикой 3 в ряд. По крайней мере, не встречал похожей в app store.

Ответить

Привет. Буквы, было бы лучше, менять по принципу кубика рубика и оставить ходов 50 чтобы не крутить барабан как в слотах. Хотелось бы видеть слова которые собрал.

Ответить

Привет.

Тяжело представляю себе как это реализовать в плане UI, если делать не в 3D.

А смысл в собранных словах? На мой взгляд, вполне адекватно показываю те слова, которые собраны с помощью улетающей плашки. Обычно я всегда добавляю лейбл для собранный слов, но тут еще и элементарно места мало на сцене :)

Ответить

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

Ответить

Бесконечно вращать не получится — на каждый уровень определенное кол-во ходов. 
Слова рано или поздно так же перестанут собираться.
Посыл про считать ходы и запоминать буквы не особо понял. 

Ответить