
Где моё молоко? Разработка обучающей математической игры под андроид

Все дети любят играть — это бесспорный факт, который вряд ли кто-то пожелает подвергнуть сомнению. Игры и игрушки — это самые узнаваемые атрибуты детства, которые сопровождают каждого маленького человечка на протяжении всей его детской жизни, помогая, поддерживая и подсказывая что-то даже тогда, когда взрослые подсказчики оказываются бессильны или бесполезны в своей закостенелой «взрослости».
Любой толковый психолог (за исключением особо рьяных адептов субботней порки), скажет, что самый лучший способ научить ребёнка чему-либо — это придумать занимательную игру на нужную тему. Именно благодаря этому факту учебники математики заполнены задачками в стиле: «у Маши и Саши было на двоих 3 яблока и 6 груш». Детям нужен хоть какой-то игровой момент в процессе учёбы, без него им будет откровенно скучно и неинтересно.
Наверняка каждый в детстве мечтал, чтоб ему вместо очередного «уроки сделал?», родители сказали: «Ты сегодня должен обязательно хотя бы один сюжетный квест за Паладинов выполнить!»
Поэтому, когда для моей дочери пришла очередь учиться в школе, у меня появился шанс осуществить ту детскую мечту. Ну, хоть, и не полностью, но хоть чуть чуть. Обучающие игры вполне способны заменить нудное заучивание таблицы умножения по тетрадке и помочь научиться быстрее производить простейшие действия числами в уме.
Для хорошей обучающей игры я вывел 3 тезиса:
0-Игра должна быть доступной. (Идеально в данном случае приложение на телефоне, он всегда с собой, и почти всегда свободен, в отличие от того же настольного компьютера).
1-Игра должна быть яркой (серые вереницы чисел на экране-та ещё тоска).
2-Игра должна быть интересной (просто читать цифры и вводить ответы -это скучно).
3-Игра должна давать полезные навыки («Научись одевать пони для карнавала»- это не то что поможет в школе).
Чтоб не изобретать велосипед, я для начала прошерстил магазин мобильных приложений под андроид. К сожалению, 90% представленных там обучающих игр соответствуют лишь первому пункту. По остальным полный провал. Либо серые вереницы действий без обратной связи, либо обучение непонятно чему. Что ж, хочешь сделать хорошо — сделай это сам.
Подход к разработке у меня уже давно сложился такой:
- изображение идеи (рисунок)
- черновой эскиз приложения (рисунок)
- пишу основную логику игры в целом (переходы между уровнями, старт, конец игры, база игрового цикла)
- пишу сам игровой цикл
- рисую графику (черновой вариант)
- тестирую
- правлю ошибки и добавляю графику — чистовой вариант
- добавляю звуки и обратную связь для игрока (звёздочки, искорки, вспышки)
- тестирую
- исправляю найденные ошибки.
Вот такие 10 шагов.
Обычно первые 4 пункта я делаю в пределах одного дня, пока не перегорело желание работать и не потерялось то самое первое «чувство направления», которое позволяет развивать игру целостно, не разделяя её на мелкие сущности.
Программирование я описывать не стану, здесь не применяется никаких сложных алгоритмов. Поговорим о гейм-дизайне, который, как подсказывает опыт, зачастую гораздо важнее изощрённых навыков программирования.
Итак:

Первоначальная идея выглядела так: по игровому экрану медленно проплывают шарики с цифрами, на которых подвешены знаки операций, которые нужно выполнить над числами на шариках. При выборе ответа шарики лопаются, знак операции падает вниз, и выплывает новая порция шариков.
Внизу имеется 4 варианта ответов (один из которых верный). Игрок считает в уме, выбирает ответ и получает за это один балл если правильно посчитал, и -1 если ошибся. Игра продолжается бесконечно, и прерывается только если счёт достигает отрицательного значения.
Первоначально идея казалась неплохой, но чтоб игра была всё таки игрой, нужно более явно обозначить возможность проиграть, и сделать игровой процесс чуть аркаднее. Для этого было решено отказаться от разнообразия действий с числами на экране внутри одной игровой сессии. Для этого я убрал вычитание и умножение, оставив лишь сложение.
Это позволило отказаться от подвешивания на шариках знаков операций, и заменить их на более полезную нагрузку, которая будет падать при выборе вариантов решения.
В качестве нагрузки я нарисовал мужичка, а чтоб ему нескучно было падать на земле ему организовал шезлонг с прелестницей (это для разработки, чтоб было веселее, потом заменю на что-нибудь более подобающее детской тематике). Количество вариантов ответов увеличил до пяти. Чтоб добавить процессу живости, в одной из частей экрана организовал воду, в которую может падать «полезная нагрузка» если игрок слишком долго будет думать над ответом.
Потом подумал, и добавил ещё и несколько коробок с анимироваными «бонусами», которые нужно было сбросить непосредственно в шезлонг.
Игровой экран приобрёл вот такой вид:


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

Шарики летят слева направо, ударяются о невидимую стенку справа и летят обратно. Если игрок не успел сосчитать, пока они летят туда и обратно, то шарики лопаются, а «полезная нагрузка» падает в воду. Как только оба шарика лопнули, вылетает два новых.
Играть уже веселее, у подсчёта цифр появилась цель — спасать «нагрузку» от утопления.
Теперь, когда основная игровая механика определена, и запрограммирована, можно приступать к перерисовке графики.
Для начала, главный герой! Да, в игре обязательно должен быть главный герой. Он олицетворяет самого игрока, и сближает его с игровой реальностью. Мне пришёл в голову кот-обормот, и я решил его посадить прямо посреди игровой сцены, а полезную нагрузку заменить на бутылки с молоком.
Первоначально котик был улыбающийся, но после недолгих размышлений и экспериментов над живыми образцами семейства кошачьих, я пришёл к выводу, что кот, которому на голову падают бутылки с молоком не должен быть сильно счастлив.

Также переработал фон в более урбанистический стиль, долой шезлонги с прелестницами!

Усаживаем кота посредине, и заваливаем его тоннами молочных бутылок.

Отлично. Игровой процесс идёт весело, котик печально сидит под градом падающих молочных бутылок и думает свои грустные мысли. Теперь пора добавить немного драмы.
Как нам всем известно, ничто в нашем мире ниоткуда не берётся, и никуда не исчезает. Вот и кот, должен откуда-то взяться на этой забытой всеми платформе.
Я вышел во двор и окинул глазами соседские балконы. Точно! Вот оно! Кот будет выпадывать из окна! Причём не просто сам выпадывать, а его будут оттуда выбрасывать!
Вот так это выглядело изначально
А это после того как жена и дочь вступились за котика
Уже лучше! История печального котика начала обрастать подробностями. Добавим ещё немного драмы, и придадим смысл необходимости складывать цифры! Пусть за каждый неверный ответ кусок платформы, на которой сидит котик, взрывается и падает в воду. А через 5 неправильных ответов и сам котик оказывается в воде.

Ну вот. Теперь картина полная, игра имеет смысл, цель и пользу для игрока. Теперь по вечерам я могу просто сказать дочери: «Прелесть моя, покажи мне на телефоне результат счёта от 1 до 100 не менее 50, и можешь идти дальше смотреть свои мультфильмы». И всё, никаких истерик, сидит ребёнок тихонько, тыкает пальцем в телефон. Математика прокачивается, родители довольны.
Саму игрушку можно посмотреть вот здесь:
play.google.com/store/apps/details?id=air.ru.sublustris.whereismymilk
Ну или вот qr-код, чтоб можно было установить сразу с телефона

Перед тем, как выпустить игру в свободное плавание, я обратился к нескольким издателем с предложением взять её под своё крыло (впрочем, без особой надежды на успех, жанр не мейнстримный). Из всех, к кому обратился, хочу положительно отметить лишь парней из FDG, от них я получил ЕДИНСТВЕННЫЙ!!! вежлиый и честный ответ, за что им от меня большой респект.
PS:
Чуть не забыл, AS3-AIR, FB 4.7, Starling, Photoshop.
- +9
- Sublustris
Комментарии (11)
Постараюсь затестить, как время будет…
а так — идея и реализация выглядят отлично! хочу больше клёвых образовательных игр.
Красиво, но: мало звуков; нет нарастания сложности — соответственно быстро надоедает; сюжет претендует на абсурдный юмор, но не дотягивает )