Хабрахабр

[Из песочницы] Путь школьника к разработке мобильных приложений

Здравствуйте, хочу рассказать о том, как я пришёл к созданию своей первой относительно серьезной игры для IOS и Android.

Предыстория

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

Выбор мой пал на небезызвестный Python, ибо я был наслышан о его широком спектре применения и относительно легкой освоимости. Как это и полагается, у меня появился интерес и к другим языкам программирования, да и я решил «вырасти» из пресловутого Pascal. Немного продвигаясь в чтении соответствующей литературы, для практики я решал задачи из «Проекта Эйлера».

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

Для начала я решил немного попрактиковаться на чём-нибудь банальном. Найдя для этого занятия библиотеку PyGame, я взялся за дело. Тетрис всё же делать не стал, но реализовал, хоть и не сразу, старую-добрую игру «жизнь», чем был очень доволен.

Жизнь

Далее к моим творениям присоединились: почти законченная DX-Ball, в которую я в середине нулевых с интересом играл на дядином компьютере, копия Supaplex в зачаточном состоянии (всё та же ностальгия) и, в таком же состоянии, аркада, вдохновленная относительно современной The Binding of Isaac.

Dx Ball'

Isaac'

Начало студенчества и первые порывы к созданию собственных проектов

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

Программирование отошло на второй план, но, сдав экзамены и поступив на «Электронику и наноэлектронику» в Санкт-Петербургском Политехе, я вернулся к программированию. Затем, начался самый ужасающий период в жизни любого школьника: ЕГЭ. Более того, студенческая жизнь немного встряхнула меня, научила ответственности, из-за чего я решил, что отныне все свои проекты буду доводить до конца.

Остановился всё на том же Python, так как это было единственное, что я так или иначе знал и за что мог уцепиться. И вот я решил написать что-то под Android. К сожалению, как бы мне не хотелось, Python+Kivy не самый лучший вариант для разработки под андроид, и я понял, что далеко мне не уехать в этом направлении. Начал изучать фреймворк Kivy.

Тогда, на волне популярности баттла двух известных рэп-баттлеров, мой друг предложил сделать тест по этой теме и подготовил вопросы для него. В итоге, потратив значительное количество времени на такое простое приложение как тест с выводом нескольких вариантов финального результата, я всё-таки довёл этот скромный проект до конца и даже залил его на GooglePlay. Так появился наш первый доведенный до конца проект, и появилась команда из двух человек, взявшая себе имя «Aspid Dynamics».

Остальное время ушло на рисование иконок и многочисленный редизайн (Вышло в итоге не очень, но могло быть и хуже). Основное время ушло на знакомство с Kivy и ещё одной библиотекой KivyMD, которая предоставляла элементы Google Material Design. Так как я работал уже не один, это немного упрощало процесс разработки и мотивировало меня.

Новые начинания

Получилось не совсем то, чего я хотел, но я решил двигаться дальше. Присмотрелся к новенькому для меня инструменту разработки, коим был хорошо известный движок Unity. Выбор дальнейшего направления развития был окончательно осуществлён, осталось (всего-то) познакомиться с C# и изучить возможности самого Unity. Таким образом, мы подобрались к событиям, которые происходили совсем недавно.

Идея была простая: создать игру, в которой люди будут выписывать слова, подходящие по заранее заданному условию. Как и ранее, я решил не браться сразу за что-то неподъемное. Поначалу идея не казалась какой-то новой, но, проверив Play Market, я не обнаружил подобных игр, что в конечном итоге и убедило меня в удачности задумки. Один из простых примеров: «Введите слова, содержащие три буквы “о”», после чего вы вводите, например, «колокол».

Проект «Знаток Слова»

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

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

букву или последовательность букв, содержание «подстроки» в слове, содержание N букв, чётность/нечётность количества букв в слове и т.д. Шаблоны – это своего рода основа для некоторых критериев, которым должно удовлетворять слово, среди них: начало слова на «подстроку», т.е.

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

Знаток Слова

Новые проблемы и неожиданные решения

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

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

Я не смог найти корреляции между количеством слов, соответствующих заданию, их частотностью и тем, сколько набирается очков (Это означало, что уровни придется балансировать также — вручную). Из-за того, что необходимость придумывания уровней тормозила разработку, а также из-за описанных выше проблем, я принял решение реализовать генератор уровней, который на основе наших шаблонов создавал бы вменяемое задание.

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

На некоторых шаблонах мы и вовсе, находя одно слово, попадаем на целый кластер (например: окончание на ‘ель’, если нам придёт в голову слово учитель, то можно заметить, что многие профессии кончаются так: ‘строитель’, ’водитель’ и т.д.). А вот если в условии будет не более 4-х гласных и ровно 8 букв, то, хоть таких слов и в 6 раз больше, скорость подбора явно уменьшится. Если бы не было никакой связи, ничего бы не объединяло эти слова, то простым перебором у себя в голове мы бы угадали гораздо меньше.

Полировка, новые режимы, последние штрихи

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

Отличием от классического режима является тот факт, что здесь перед игроком стоит задача за N секунд ввести слово согласно заданному условию. Это было “выживание”, где нужно вводить слова до тех пор, пока не истечет таймер. При успешном выполнении условия генерируется новая задача, а таймер продлевается.

Само собой, гораздо интереснее помериться словарным запасом с другом на перемене, или поиграть с незнакомым человеком онлайн. Позже, мы решили, что для постоянного поддержания контента, нужно добавить мультиплеер. Довольно долго провозившись с реализацией игры по сети, я всё-таки разобрался и закончил 2 соответствующих мультиплеерных режима. «Классический» режим мультиплеера подразумевает под собой соревнование в количестве полученных за определенное время очков.

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

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

Выпуск игры, планы на будущее

Изначально Знаток Слова должен был выйти только в Play Market из-за ограниченности бюджета, но мой друг помог достать необходимые для выпуска в AppStore 99 долларов.

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

Большое спасибо за внимание всем, прочитавшим этот длиннопост.

Искренне ваши,
Команда Aspid Dynamics.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть