pafes

На Пикабу
45 рейтинг 3 подписчика 0 подписок 5 постов 0 в горячем
Награды:
5 лет на Пикабу
2

Как CDEK мою посылку хотел украсть

Предыстория

Заказал я как-то раз посылку в одном интернет-магазине (не буду называть, чтобы не давать рекламу, их услугой также не очень доволен). Летела она сначала с одного конца Земли в другой, затем там немного путешествовала и отправилась в итоге в сторону доставки. Приелетела в транзитную страну и пролежала там почти 3 недели перенося сроки отправки. В конечном счете, она все-таки была отправлена в город выдачи и передана в локальную службу доставки. Здесь хочу отметить, что это были еще достаточно адекватные сроки - 28 дней при общем среднем сроке доставки 30 дней. В принципе, еще есть шанс, что успеют.


Локальная служба доставки

3.12 создана доставка. 4.12 принята в пункте приема и направлена мне с главного склада CDEK в Москве - д. Ближние Прудищи, 2/1. Дата выдачи указанная в приложении - 5.12. Наступает день Х, ожидание зашкаливает, но в день доставки прислали уведомление, что требуется еще 2 дня на доставку. Что могло пойти не так в рамках одного города тем более Москвы? Согласился и смирился, срок не критичный. 7.12 с самого утра ожидаю, в течение дня так уведомления/сообщения о доставке не получил.


Борьба за посылку

Решил уточнить через чат поддержки где моя посылка и когда будет доставлена, вопрос приняли, обещали дать ответ в течение суток. До конца дня ко мне никто не вернулся ни звонком ни сообщением. Решил, что дам еще один день, так как 7.12 - суббота, а в воскресенье самому было не до поездок к пункту выдачи. Наступает понедельник, но звонка с информацией/уведомления о доставке/смс-сообщения до сих пор нет, никакого движения в поиске посылки нет. Решил, что надо обращаться в чат повторно. Пишу - опять информацию приняли, свяжутся в течение дня. День проходит, ни ответа ни привета, информации снова нет. В чате помимо общих фраз с соболезнованиями и пониманием (зачем они нужны, когда посылку найти не могут?) сообщают, что посылка выехала, но до пункта выдачи пока не доехала, информацию проверяют. Проходит еще один и еще один день. Никто до сих пор ни разу не позвонил сам и информацию не предоставил, удается по крупицам в чатах выудить, что что-то ищут, проверяют, какие-то записи с камер запрашивают, но ничего найти не могут. Хотя что там по камерам смотреть, если дата приема и выезда со склада известны - 15 минут на все про все . Проходит неделя (7 дней на поиск посылки в рамках одного города по регламентам самого CDEK), информации по прежнему никакой нет - одна видимость работы и то сложно это даже так назвать. Тон общения с операторами немного ужесточился. Операторы начинают пользоваться своим служебным положением и получают мой номер мобильного телефона. Со своих личных телефонов начинают слать оскорбления:

Как CDEK мою посылку хотел украсть Жалоба, Защита прав потребителей, Длиннопост

скрин 1 - обратите внимание на имя оператора

Как CDEK мою посылку хотел украсть Жалоба, Защита прав потребителей, Длиннопост

скрин 2 - опасные оскорбления

Как CDEK мою посылку хотел украсть Жалоба, Защита прав потребителей, Длиннопост

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

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


Кульминация

Наступает второй понедельник (проходит в общем счете 11 дней с обещанной даты доставки) как не могут (не хотят?) найти мою посылку, решаю, что больше не буду слушать операторов, которые оскорбляют, не дай бог еще до угроз жизни мне и семье дойдет, и звоню в пункт выдачи, попадаю в административный отдел где выслушали и приняли мою информацию, обещали перезвонить в течение 30 минут и сообщить о местонахождении моей посылки. Провели инвентаризацию и о Боги! Мне перезванивают (впервые за все время общения кто-то из поддержки CDEK сдержал свое слово) и сообщают, что посылку нашли. Также сразу зафиксировали претензию на сроки доставки. Дополнительно, оставил претензию в бумажном виде в пункте выдачи.


Итог

В конечном счете, на претензию ответили, что заказчик не вы и возмещение нужно оформлять через интернет-магазин, с вами общаться никто не будет. Интернет-магазин сообщает, что если компенсация и будет, то ее размер по их договору со CDEK составляет 3% от суммы доставки (а какая может быть сумма доставки по одному городу ? - риторический вопрос, копеечная) за каждый день просрочки (рассчитали где-то 20 рублей за все). Решил в итоге пожелать всем хороших праздников и больше никогда не обращаться в эти конторы, которые ни за сроки не отвечают, ни информацию по посылке найти оперативно и самостоятельно не могут. До сих пор ни по одной жалобе со мной никто не связался, прошло уже больше месяца - сижу, жду.


P.S.

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

Показать полностью 3
0

Waffle Man. Строй мост - доберись до своей девушки

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

Итак, привет всем, кто остался! Идея игры с созданием моста родилась в моей голове более года назад. При чем игра должна быть от третьего лица и включать такие жанры, как: билдер, шутер, дефендер. Билдер выражается в механике строительства моста, шутер - в необходимости отстреливаться, чтобы враги весь мост не разобрали, дефендер - в установке турелей, чтобы пассивно защитить себя.
Сначала был написан прототип и отправлен на участие в Ludum Dare #41

Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео

https://ldjam.com/events/ludum-dare/41/bridge-maker-prototyp...

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

Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео

Были созданы механики оружия и турелей, боссов, создан магазин. Игра стала более или менее играбельной, стала выглядеть похожей на игру. Кроме внешнего вида был доработан искусственный интеллект врагов и босса (на момент написания статьи он по прежнему не идеальный и находится на стадии доработки).
После того, как презентабельный прототип завершён, пришло время выбора игрового сеттинга. Спустя долгие дни размышлений был выбран мир сладостей, где главные герои - приятные на вкус и вид сладости, а именно: вафля и макарун. Их враги - голодная до сладостей девочка и ее помощник - злой повар. Мост строить необходимо от одного пирога до другого. Блоки для моста - печеньки с суфлешкой. Стрелять игрок будет конфетами, а турель - плюющаяся мороженка.
Достаточно быстро нашёл приемлемые варианты моделей в Unity AssetStore, которые можно использовать для персонажей. То есть взял набор из сладостей, собрал игровое окружение и приблизительный вид персонажей. Помучившись немного с созданием моделей самому понял, что надо заказывать их у кого-нибудь. Решил выбрать Upwork сервисом для заказа работ на аутсорс. Очень хороший, удобный и на нем можно найти земляков. Один из кандидатов был парень с Украины. Дороговато, конечно, берет. Кроме того, потребовал переработки модели почти полностью, включая сетку. В итоге он переработал сетку у персонажей, поправил расположение текстуры, создал скелет и анимации. Анимации у этого парня крутые вышли, прям очень понравились. Даже не так жалко денег стало. После первой итерации внедрения моделей и их анимаций понял, что большого количества анимаций еще не хватает и некоторые модели надо заменить. Модели нашел быстро, а вот с анимациями пока на холд поставить задачу пришлось, позже вернемся.

Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео
Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео

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

Waffle Man. Строй мост - доберись до своей девушки Android, Gamedev, Игры, Candy, Длиннопост, Видео

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

Ссылка в Google Play: https://play.google.com/store/apps/details?id=ru.pascalman.w...
В Instagram: https://www.instagram.com/ipaf/

Показать полностью 18 1
0

Автоматическое тестирование уровней в классической Match 3 игре

Автоматическое тестирование уровней в классической Match 3 игре Android, Игры, Разработка, Match 3, Тестирование, Длиннопост

Во время разработки нашей Match 3 игры появилась необходимость в тестировании проходимости уровней, идея ручного тестирования очень быстро отпала из-за никзой скорости. После этого стали думать на счет автоматического тестирования. Сразу вспомнилась статья на Хабре, где ребята делилилсь подобным опытом. Их идея нас не очень удоавлетворила из-за того, что они тестировали через GUI, хоть и с минимальными анимациями. Этот способ быстрее ручного тестирования, но это не максимум. В своей игре мы решили пойти другим путем - тестировать уровни исключительно моделями игровых объектов и сущностей. В результате ухода из GUI к консоли скорость стала 3-5 минут на 198 уровней (в одном наборе 198 уровней) в зависимости от вида тестирования (вверх или вниз) и количества итераций. В этой статье, как раз, хотим рассказать о том, как проводилось тестирование уровней в нашей игре Travel Jewel (ссылка на Google Play будет указана в конце статьи). Сначала расскажем о том, что за игра, о чем она, о ее особенностях и отличиях от других Match 3 игр, затем о создании уровней и потом уже о самом тестировании, в конце выделим результаты тестирования. Итак, начнем.

Что за игра, о чем

Travel Jewel - классическая Match 3 игра, которая рассказывает истории о достопримечательностях крупных городов России. Дизайн выполнен из элементов корабля и вместо камней используются векторизированные изображения достопримечательностей. В качестве фоновой музыки выбран шум прибоя и крики чаек. Первый набор уровней содержит достопримечательности Петропавловска-Камчатского. Список городов составлен уже полностью, но об остальных городах пока не рассказываем. Механики используются классические: три камня - очки, четыре - очки + камень flash, пять - очки + супер-камень, который уничтожает все камни определенного типа, буква "L" - бомба. Кроме того, в игре реализовано автоматическое перемешивание камней в случае, когда больше нет камней для перемещения. В игре присутствует таблица рекордов трех типов: глобальная, по наборам уровней и по очкам за достижения. И да, в игре также есть ряд достижений, например, за каждый новый день захода в игру или за игру в 1, 5, 10, 50, 100, 150, 198 уровнях и за 3 звезды в них. Если реализовать поддержку Firebase и Unity Ads для iOS на pod'ах, то игру можно опубликовать и в App Store для iOS устройств. Исходя из чего, у всех устройств, даже на разных ОС будет одна большая таблица рекордов и кроссплатформенное сохранение результатов игры.

Игра написана на Java, на движке LibGDX с использованием библиотек Firebase (database, auth, storage, performance, analytics) и Crashlytics, который скоро будет доступен из Firebase. Помимо этого в Firebase используется Cloud Function, которая обновляет таблицу рекордов раз в час.

О создании уровней

О создании уровней много не скажешь, потому что все layout'ы создавались вручную, после этого был сгенерирован список целей для игрока на каждый уровень, как они будут меняться в зависимости от номера уровня и в завершение, все блоки (за камнями которые), решетки и льды были расставлены тоже вручную. В качестве средства для создания уровней использовался Excel. На листе располагалось 4 поля 8х8, первое отвечает за блоки, второй за наличие камня в ячейке, третий - за решетки и четвертый за льды. Проверка на валидность, что не стоит решетка на ячейке, в которой нет камня, делается на формулах. Для экспорта всех данных в файлы и дополнительных проверок были написаны макросы. После этого файл можно сделать более читаемым прогоном через https://jsonlint.com/, например, если это необходимо. Дальше файл отправляется через Firebase Function в Firebase Database, чтобы ключи были сгенерированы по стандартам Google (через push) и не менялись после изменений уровней при повторных заливках, короче говоря, для удобства личного и пользователей. Для пользователей - чтобы после каждого обновления уровней не надо было переигрывать заново. Для первого набора уровней такого способа создания уровней вполне достаточно. В будущем, для второго набора уровней можно уже что-то более дружественное придумать без такого количества этапов и ручной копи-пасты.

О тестировании

Первоначально количество ходов и значения для звезд подбиралось пальцем в небо исходя из логических соображений, что создавало сложности при ручном тестировании - уже на первых уровнях возникали огромные сложности при прохождении и получении хотя бы какого-то количества звезд. В итоге было решено написать бота для получения количества необходимых ходов для завершения целей и значений для звезд. Бот претерпел много изменений с самого начала и теперь выполняется в три этапа: считает сколько необходимо ходов для завершения цели, корректирует эти значения, чтобы шанс прохождения был 60% и затем на этих ходах получает значения для звезд, чтобы с тем же шансом можно было получить 3 звезды. Все шаги можно объединить в один, но это может усложить понимание кода и сделает невозможным или неудобным иметь, так сказать, snapshot промежуточного результата.

Код самой игры приводить не будем, потому что статья не об этом, будут приведены статическая диаграмма классов модели объектов игры и код только самого бота.

Автоматическое тестирование уровней в классической Match 3 игре Android, Игры, Разработка, Match 3, Тестирование, Длиннопост

После этого необходим базовый класс «игры», который будут расширять классы определенного вида тестирования - вверх или вниз.

Базовый класс «игры»

Базовый класс содержит логику инициализации данных уровня (счета, игрового поля и целей), логику ведения счета и произведения хода, проверку на завершенность целей. К сожалению, на pikabu нет подсветки кода и возможности сворачивать блоки, поэтому выкладываю код на pastebin, чтобы размер поста был адекватным: https://pastebin.com/NqWc3SJt.

Вспомогательные классы базового класса: https://pastebin.com/6w2udRtZ.

Отдельно хотелось бы остановиться на логике совершения хода. Сначала из класса Field получаем список всех возможных ходов и дальше выбираем самый эффективный. Первым выполняется поиск супер-камней, которые уничтожают камни одинакового типа. Приоритет отдается камню, который имеет больше всего похожих камней, то есть с максимальной силой. Стоило бы, конечно, отдавать приоритет согласно целям, есть над чем поработать. Если первый поиск не дал результатов, то выполняется поиск для завершения целей по типам этих целей и случайным образом выбирается конкретный ход для выполнения цели. Дальше смотрим на ходы, где есть камни с любым эффектом, например, flash. Предпоследними проверками ищутся ходы на 5, 4 и 3 камня, если все предыдущие не дали результатов. Если же ни один из них не дал результатов, то выбирается случайный ход. После этого из хода считаются индексы для камня, которым будет совершен ход и индексы, куда будет совершен ход. В завершение – ход выполняется.

UpwardGame

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

Класс UpwardGame: https://pastebin.com/viQyiAQb.

Тестирование вверх всегда выигрышное, поэтому и возврщается статус WON.

DownwardGame

DownwardGame делает почти то же самое, что и UpwardGame: в цикле проверяет завершенность целей, делает ход и базового класса, но уменьшает счетчик ходов. В случае, если ходы закончились, то цикл завершается. Если при нуле ходов цели все-таки выполнены, то игра считается выигранной. В зависимости от этого делается запись в лог и возвращается соответствующий результат.

Класс DownwardGame: https://pastebin.com/QdkU8rzB.

Метод upward-тестирования

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

int star1 = (int) (scoreAv * .33f / 100) * 100;
int star2 = (int) (scoreAv * .66f / 100) * 100;
int star3 = (int) (scoreAv / 100f) * 100;

Метод upwardTest: https://pastebin.com/wwzqbKVA.

Данные по наборам уровней хранятся в обычном json-файле (до отправки в Firebase Database, конечно) и читаются с помощью Gson через класс обертку LevelPacks, который содержит только одну публичную property - ArrayList<LevelPack> levelPacks.

Метод downward-тестирования для коррекции количества ходов

Метод прогоняет 100 игр также на каждый уровень и проверяет какой процент пройденных. Если значение меньше, чем 60+-1, то количество ходов увеличивается на единицу, иначе уменьшается.

Метод downward-тестирования для коррекции количества ходов: https://pastebin.com/QsjDAKn3.

Метод downward-тестирования для коррекции значений для звезд

Метод прогоняет также 100 игр и проверяет какой процент игр набрал 3 звезды. Если меньше, чем 60+-1, то значение последней звезды уменьшается на 100, иначе увеличивается на то же значение, после этого первые две звезды рассчитываются также как и при upward-тестировании.

Метод downward-тестирования для коррекции значений для звезд: https://pastebin.com/BGme8p9c.

В конце тестирования все найденные значения проходили логическую проверку глазами. Например, на 25 уровне скорректированное значение для первой звезды - 0, что выглядит неприятно. Оно менялось на 100, а для второй звезды на 200, вместо 100 рассчитанных.

Результат тестирования

После автоматического тестирования проходимости уровней мы получили следующее:

- теперь стало возможно пройти уровни с высоким шансом на успех и звезд можно получить почти всегда 3, тогда как раньше, повторюсь, сложно было пройти уровень и получить хотя бы одну звезду; раньше на 5 уровней требовалась неделя для прохождения и корректировки количества ходов и значений для звезд, сейчас же за один день можно пройти ~20 уровней и не утомиться, к тому же даже не меняя количество ходов;

- тестирование помогло исправить огромное количество багов в логике игры;

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

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

Послесловие

Да, бот не идеален, он берет только верхние действия и не по всем веткам проходит из-за неверной логики рандома в базовом классе "игры", в методе updateActions верхние два из нижних трех блоков никогда не выполняются (догадка, пока не проверяли). Кроме этого, некоторые ветки выбора также можно улучшить. Например, как отмечалось ранее, при нахождении супер-камня отдавать предпочтение для совмещения тому, который находится в целях.


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

Ссылка на игру: Travel Jewel - Classic Match 3 game.

Автоматическое тестирование уровней в классической Match 3 игре Android, Игры, Разработка, Match 3, Тестирование, Длиннопост
Показать полностью 2
7

Цена мечте

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


1 этап

С 14 лет после игры в ММО решил, что хочу стать разработчиком игр. Начал с создания своих серверов для LineAge II и сайтов к ним. На какое-то время поставил затею на паузу, так как не знал куда двигаться и как.


2 этап

После девятого класса поступил в ИТ колледж, где познакомился с программированием. Программа по программированию предполагала изучение в начале алгоритмов, а затем Pascal. На алгоритмах (блок-схемах) программирование завлекло мозг полностью. Начал уже с этого этапа подрабатывать помощью одногруппникам и позже даже всему потоку. После перехода от алгоритмов к Pascal через несколько пар решил, что очень мало и долго рассказывают и решил купить книгу. В итоге выучил сам процедуры и функции. На тот момент ООП было в голове, но применения ему пока не находил, может не до конца понимал или задачи не требовали. Уже на втором курсе начал изучать С++ с OpenGL вместо Pascal, потому что посчитал, что Pascal сильно ограничен. Думал, что надо начать разработку игр с создания своего движка. Попался на тот самый большой камень, который потянул интерес к разработке на дно. Во время учебы создавал небольшие сайты и пытался сделать крохотную игру в духе танчиков на Pascal. Даже нарисовал танка и заставлял его двигаться. В колледже был одним из лучших программистов (конечно стоит согласиться с тем, что специальность Прикладная информатика в экономике не дает глубоких знаний по программированию, потому что ООП и паттерны проектирования нам даже не рассказывали).


3 этап

После колледжа поступил в ВУЗ на специальность Информационная безопасность. Думал, что будут рассказывать про вирусы и операционные системы на низких уровнях, а было больше про техническую информационную безопасность, как то: ПЭМИН, юридическая составляющая и прочее. На этом этапе разрабатывал больше вспомогательный софт. Создал крестики-нолики и чат на сокетах на Delphi и много-много прочего софта для решения небольших задач. Из игр занимался прототипированием на Processing, некоторые имеют главный экран и меню. Весь список игр (правда без ссылок и скриншотов, если будет интересно, то могу куда-нибудь выложить):

- Space Invaders;

- Arkanoid;

- Tetris;

- Snake;

- леталка с видом сверху;

- шутер с видом сверху про атаку военной базы (игра включала два разных вида оружия, что было прорывом для себя лично);

- атмосферная игра про Путешествие.


Ближе к концу обучения и к диплому начал изучение LibGDX и основ программирования в духе GOF и Чистого кодо Роберта Мартина. Параллельно изучал Unity, познакомился с основами и начал изучать работу с сетью. В дальнейшей хотел изучить AI.


Но история сложилась иначе. Решил, что надо создать свою первую полноценную игру. Увидев потенциал в LibGDX, выбрал его "движком" для первой игры. В качестве жанра был выбран PacMan. Разработка длилась 1 год и 3 месяца по вечерам в свободное время. Сначала описал диаграмму классов, начал писать код. После завершения большей части кода перешел к дизайну. Очень долго выбирал способ создания персонажей. Решил, что нужен 3D-редактор. Начал изучать работу с 3Ds Max, но понял, что это очень муторно с нуля создавать персонажей и анимировать их. После этого попробовал то же в Maya и пришел к тому же выводу. В конце концов остановился на Poser. В нем и персонажи по-умолчанию нормальные и анимации у них есть. Немного доработав, вставил в игру. После этого проработал остальные части дизайна в виде декораций. Почти полностью изучил Photoshop. На дизайн ушло практически пол года или около того. В завершение разработки нашел звук, немного его обработал и добавил к игре. 3 марта 2017 года игра оказалась в Google Play. Ссылка для тех, кому интересно: https://play.google.com/store/apps/details?id=ru.pascalman.d.... На текущий момент игра имеет 179 загрузок, а прошло уже больше полу года.

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

На последнем курсе ВУЗа устроился на работу, сначала по трехмесячным договорам, затем по трудовой, где и работаю сейчас. Почти по профилю, правда уровень ниже желаемого - писать макросы, а не игры и даже приложения под Android. Параллельно этой работе вел разработку DormitoryMan и участвовал в LD #38 (следующий этап).


4 этап

Следующий этап был небольшой. Подготовка к нему заняла больше времени, чем сам этап. Заключался он в участии в Ludum Dare #38. Если кто не слышал о LD, то это конкурс разработчиков игр за зрительские симпатии. Некоторые проекты на нем есть действительно потрясающие. И если участвовать в нем даже в пол силы, то можно познакомиться с крутыми и уникальными идеями.

Языком выбрал Processing.js, потому что есть сайты, которые его выполняют (openprocessing.org, например) и он легок для разработки, имеет большое количество готовых библиотек, например, для работы со звуком и простенький движок для игр (p5.play). Звук записывал на собственной кухне с помощью своего ноутбука. Прототипировал в альбоме, дизайн рисовал в Photoshop. Ссылка на проект в Openprocessing.org: https://www.openprocessing.org/sketch/422870. Получил 2 лайка на сайте Openprocessing.org и занял около 700+/2500 место на ldjam.com в общем рейтинге, было еще более высокое место по категории юмора, но не называю его из-за того, что не помню, а сайт закрыт без активного ивента. Их основной портал: http://ludumdare.com/. Результатом очень доволен даже несмотря на то, что хотел принять участие в Compo, а удалось только в Jam. На первый дается 24 часа, а на второй 72. Кроме демонстрации своего проекта как раз познакомился с другими крутыми идеями и похожими играми.

Собственно весь этап этому и был посвящен.


5 этап

После участия в LD #38 решил, что надо заняться разработкой еще одной игры. Популярными играми были и есть Match 3. Думал, что смогу на волне популярности добиться миллиона загрузок и на рекламе начать зарабатывать хотя бы что-то. С мая по конец октября 2017 года вел разработку своей последней игры - Travel Jewel (ссылка на Google Play: https://play.google.com/store/apps/details?id=ru.pascalman.t...).

Разработка Match 3 далась много легче, чем аналога PacMan. Тема игры - путешествия по городам России и рассказ об их достопримечательностях. Начинается путешествие в Петропавловске-Камчатском и проходит по всем большим городам России. В дизайне присутствуют почти все элементы убранства кораблей, будь то: канаты, дерево, старая бумага, бочки и даже якори. Фоновой музыкой выбран звук прибоя и периодический крик чаек. Игровые камни - сами достопримечательности. По началу было сложно сделать их не монотонными и при это разными, оттенки были очень похожи друг на друга. Дизайн рисовался в Illustrator, звук брался с открытых источников. Могу сказать, что разработка шла по большей части очень гладко и легко. Возможности движка известны, идея не включает кучу спецэффектов и игровой логики. Дизайн, не смотря ни на что, все равно отнял большую часть времени. Игра была опубликована 20 октября 2017 и заработала 3 загрузки (от самых близких друзей, судя по всему). Поэтому итогом разработки является факт того, что игра не взлетела. Возможно, что интересней играть в конфетные Match 3.


Чего это стоило, итог всех мытарств

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

Подумай трижды перед тем, как решать тратить свободное время на разработку игр, читатель! А я попробую свои силы в B2B-секторе. Всем спасибо и удачи!

Показать полностью
Отличная работа, все прочитано!