Pull to refresh

Потыкай палочкой свой мозг

Development of mobile applications *
Этот пост участвует в конкурсе „Умные телефоны за умные посты

imageЧем обычно мы занимаемся сидя в автобусе/метро/очереди? Правильно — фигнёй. Обычно это или музыка или глупые игры на мобилке вроде «Попробуй найди такой же шарик, как и я, скотина!».

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

Идея есть, а значит открывает Qt Creator -> Новый проект -> Qt Quick. Два вечера непрерывного кодинга по два часа, вечер на локализацию на три языка и наполнение базы слов, компиляция для Symbian и неделя тестирования как самостоятельная, так и на мобилках своей подруги, друзей/одногруппников и прочих млекопитающих. Плюс два дня ожидания дизайна приложения и его иконки от друга увлекающегося.

Ах да… Ещё было около трёх дней на сборку и тест под Android на одном из его разрешений экрана. Какое-то там стандартное, но существенно ниже нокиевского… 320x480 против 360х640. Да, они таковы — сложности портирования софта на Qt. Аж минут 20 иногда потратить надо.

Глянем, что же получилось?

Начинается всё, как обычно, с меню:
image image image

Как несложно догадаться в приложении есть система рейтингов, а значит и профили пользователей. Кроме того, список языков снизу не абы для чего — это полноценная локализация всего приложения на лету, без его перезапуска… Кстати с QML в этом плане есть кое-какие косяки, но я их быстро поправил, воспользовавшись этой шпаргалкой. Ай-яй-яй Nokia, ай-яй-яй =) Поправляйте косяк…

Далее, мы можем начать новую игру, создать или выбрать существующий профиль, выбрать уровень и собственной начать играть:
image image image image

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

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

image
Собственно из того, что остаётся показать — пожалуй экран окончания уровня. А выглядит он просто, как и всё остальное.

Мда, именно так — угаданные и пропущенные слова, использованные подсказки и общий результат.

Отдельно хочется отметить всю простоту и лаконичность самого QML, не вдаваясь в подробности портирования и разработки всего остального. Это действительно обалденное средство как для быстрого прототипирования, так и для разработки приложений. Собственно, десяток прогарммистов, дизайнеров, тестеров и прочих идейных вдохновителей и спиногрызов могут быстренько основать небольшую контору по клепанию мобильных игрушек с недельными итерациями, когда каждый программер делает свой собственный проект. И за пару месяцев наводнить рынок хоть и не профессиональными, но достаточно качественными игрушками и небольшими приложениями. Пресекая вопросы: да, я немножко писал на Flash и вообще много на чём, но я могу сказать совершенно точно — более удобного средства на данный момент не существует. Огорчает только размер приложений и уровень портов под Android и iOS (Да, да игрушка прекрасно и на нём себя будет вести, если собрать с текущим портом Qt 4.8 на uiKit). Так… Чего там, настрочил я уже бредятины, чтобы картинку обтечь? Вроде да =))

Давайте теперь кратенько пробежимся по программной части.
image

Содержит приложение совсем капельку файлов — 14 QML-ек, три скрипта да немного картинок. Ничего особенного там нет… Хотя, в качестве примера, хочу поделиться примером реализации последовательной анимации в transition:
...
        Transition {
            from: "Menu"
            to: "Rules"
            SequentialAnimation {
                PropertyAnimation {
                    target: mainMenu
                    properties: "opacity"
                    duration: 250
                }
                PropertyAnimation {
                    target: rules
                    properties: "opacity"
                    duration: 250
                }
            }
        }
...


Это нужно для реализации такого эффекта переключения между окнами, когда одно приложение гаснет, а второе начинается появляться только после полного потухания первого.

Дальше… Алгоритм хранения уровней также прост, это многомерные JS-массивы со словами:
...
levels["Russian"] = []
levels["Russian"][1] = new Object();
levels["Russian"][1].tryCount = 3 //попыток угадать одно слово
levels["Russian"][1].levelWordsCount = 10 //количество слов которые необходимо попробовать угадать чтобы пройти уровень
//levels["Russian"][1].skippedWordsCount = 10 //выборка слов для уровня из массива
levels["Russian"][1].hintCount = 5 //сколько раз за уровень можно пользоваться подсказкой
levels["Russian"][1].words = ["бег","боб","бог","бой","бок","бур","вой","газ"]
...

Ну и аналогично для других уровней и языков. Больше в коде нет почти ничего интересного, всё тривиально… Разве что ещё функция раздраконивания слов… Но её можно тоже подглядеть в исходниках.

Кстати, пока не забыл — добавка к багам Qt. Если использовать конструкцию
FontLoader { id: applicationFont; source: "styles/default/fonts/Ceremonious Two.ttf" }

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

И последнее… Как в это чудо поиграться? Весь проект лежит на страничке в Google Code. Там можно глянуть список файлов для загрузки. К сожалению, при попытке закоммититься туда гугль посылает меня далеко, так что исходники только архивом на страничке загрузок. Постараюсь поправить чуть позже.

Вот что-то вроде… Всем спасибо, надеюсь было нескучно… А если у меня и завтра будет такое желание писать (ну и вы не запинаете...), расскажу ещё об одном небольшом но весьма интересном проекте…
Tags:
Hubs:
Total votes 50: ↑23 and ↓27 -4
Views 1.6K
Comments Comments 15