Будь чёток! Будь смел! Будь всегда при семках!

    Будь мужиком бл...! =)

    Но на самом деле, мне бы хотелось поговорить о том какая это «тяжкая» работа писать мобильные приложения на Qt… Разберём простой пример.

    Итак. Имеем поздний апрель, 4 подряд пары какой-то практики, мобилка с симбой и несколько скучающих приколистов. И тут приходит в одну из голов гениальная в своей абсурдности идея! «Как быть если рядом оказались чоткие пацанчики и не оказалось семок? Не поймут ведь, если с ними не полузгаешь!». Тьфу, делов то… Ставим Qt SDK, быстренько запускаем Qt Creator и создаём новый проект (причём Desktop-приложение). Распараллеливаем работу, пока мы строгаем три панельки (меню, игра, результаты) чуваки за соседним компом рисуют кирпичную стену и изображение семечки — целую и разлузганную. А так же подбирают подходящий саундтрек…

    Как это происходит… (Скрины я конечно делал только что)



    По архитектуре приложение конечно же получается простейшее, но от этого не менее весёлое. Всего то три класса:
    QSlidingStackedWidget - для красивого переключения между тремя панельками (теми самыми Меню. Игра, Результаты)
    MainWgt - без мудрствования лукавого просто запихиваем всю логику в главный виджет.
    SemkoItem - производная от QGraphicsPixmapItem, для отображения отдельно взятой семки, управления её полётом и прочее.
    

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

    А вот о самой игре, капельку упомянем. По сути, это QGraphicsView + QGraphicsScene, таймер динамически создающий новые семечки, класс отдельно летящей семечки следящий за своим падением, анимирующий сам себя. реагирующий на события и наконец следящий за своими координатами чтобы успеть самого себя уничтожить при уходе за границы видимости и великий рандом. Выглядит достаточно прозаично…

    Начинаем игру:
    void MainWgt::startGame()
    {
      if (isSound()){
        moMainTheme->play();
      }
      placeSemkoTimer->stop();
      placeTimerInterval = 1000;
      placeSemkoTimer->setInterval(placeTimerInterval);
      nextLevelCount = nextLevelIncrement;
      semkoInterval = 30;
    
      scene->setSceneRect(0, 0, 10, 10);
      ui->lcdSluzgano->display(0);
      ui->lcdUnluzged->display ( lives );
      placeSemkoTimer->start();
    }
    

    Вбрасываем семечку по таймеру:
    void MainWgt::placeSemko()
    {
      SemkoItem *semko = new SemkoItem(scene, semkoInterval);
      connect(semko, SIGNAL(luzg()),this,SLOT(luzg()));
      connect(semko, SIGNAL(unluzged()),this,SLOT(unluzged()));
      connect(this, SIGNAL(nextLevel()),semko,SLOT(nextLevel()));
      connect(this, SIGNAL(gameOver(bool)),semko,SLOT(gameOver(bool)));
      scene->addItem(semko);
    }
    

    И обрабабатываем каждое попадание пальцем пока ещё только мышкой по семке…
    void MainWgt::luzg()
    {
      int c = ui->lcdSluzgano->intValue() + 1;
      if ( c >= nextLevelCount ){
        nextLevelCount += nextLevelIncrement;
        semkoInterval -= 3;
        if (semkoInterval <= semkoIntervalMin){
          semkoInterval = semkoIntervalMin;
        }
        int livesAdd = ui->lcdUnluzged->intValue() + 3;
        ui->lcdUnluzged->display ( livesAdd );
        placeTimerInterval = placeTimerInterval - placeTimerIntervalDecrement;
        if (placeTimerInterval <= placeTimerIntervalMin){
          placeTimerInterval = placeTimerIntervalMin;
        }
        placeSemkoTimer->stop();
        placeSemkoTimer->setInterval(placeTimerInterval);
        placeSemkoTimer->start();
        emit nextLevel();
      }
      ui->lcdSluzgano->display ( c );
    }
    

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

    Ну и что там ещё интересного есть… Да по сути ничего особенного… Итак, запускаем, тетстим, подправляем параметры, устраняем недочёты, прикручиваем музыку (группе Глом и Кураж-Бамбею кстати спасибо) и начинаем баловаться…

    Менюшка…


    Игрушка…


    И не смотрите на такой некрасивый LCD снизу, в телефоне он каваен…

    «Уууу б..!» — сказала толпа бездельников ближе к концу третьей пары, взглянув на то что получается. «Ага б..!» — заметил самый нетерпеливый, — «И как мне теперь сидеть на корточках и тыкать мышкой. смотря в монитор? Неудобно же!»

    «Херня война, главное манёвры!» — промямлил главный девелопер (то бишь я) и решительно перешёл к портированию… Ох как это было сложно и долго… Аж минут 15 =).
    Схема:
    1) Втыкаем девайс в режиме PC Suite
    2) Ставим на него Qt, пользуя для этого установленный на ПК Ovi Suite

    3) Добавляем в креаторе новый вариант сборки нашего приложения

    4) Выбираем Release версию и жмякаем запустить


    Собственно всё, остаётся дождаться пока прогармма соберётся и на дисплее смартфона радостно появится менюшка запуска нашего приложения.

    Итак. Что же в итоге? За каких то пару часов с помощью Qt можно быстро наклепать вполне играбельную фиговину, готовую для работы под всеми десктопными платформами и кроме того легко запускающейся из среды разработки на устройстве. Что примечательно, в Maemo и в Android-порте всё запускается аналогично симбиану, без лишних плясок с бубном. Легко? Думаю да. Изящно? Несомненно! =)

    По самому проекту:
    Страничка
    Репозиторий
    Версия для Symbian 9.4. Для установки коенчно же требуется предварительно поставить Qt.

    Кстати да… Всё делалось на чистом C++, без использования QML. И тем не менее получилось быстро и прикольно. очень хотелось бы чтобы Qt таки стала более популярной платформой, вероятно после выхода 5.0 так и будет…

    UPD:

    Скажем дружное спасибо товарищу obramko за замечательный порт игрушки на Android

    Скриншот:
    image
    Share post

    Similar posts

    Comments 102

      +22
      Теперь гопы и на хабре!
        +7
        Ну нельзя же их дескриминировать.

        PS: Парни, надеюсь, все поняли что я прикалываюсь? =))
          +8
          нанотехногопы
            +2
            Дай кольчугу погонять…
              0
              Ай, ч0рт, не в то окно, но суть понятна…
                +5
                Дай кольчугу позвонить…
                  +1
                  кольчугу с камерой?
                    0
                    хранения…
                      0
                      с велосипедным нипелем
                        +2
                        Э, да я тебя по IP вычислю
                +2
                А чо ты имеешь против гопов, а?
                  +4
                  Какой то ты дерзкий паря
                    +4
                    Слыш, ты с какого домена вообще?
                      +2
                      Ты под каким хостером ходишь?
                  0
                  Теперь понятно почему Нокия забила на симбу и кутю, продавшись задешево микрософту…
                  0
                  Пацанчики ждут приложение для распития пива
                  +5
                  Респект, братуха. Дай краба.
                    0
                    краба-прораба)

                    Смастерить бы сервак с результатами… да что-то лень)
                      +1
                      Тогда уж сразу симулятор галеры (и уровни сложности «раб», «краб» и «премьер»).
                      +2
                      Названия методов и переменных «placeSemkoTimer, luzg,semkoInterval и lcdUnluzged» — это что-то!)))
                      Только вот картинки «семок» выглядят как-то убого. Может всё же в svg?
                        0
                        Ну код писался под предводительством 4-х голов стоящих сзади и подающих различные идеи… А вот картинки, на устройстве смотрятся нормально. Просто их обычно достаточно много на экране после 5-10-го урвоней, так что увеличь я их размер начнутся тормоза…
                        +5
                        Теперь можно отжать и мобилу и семки одним движением? :)
                          0
                          Наоборот! Как же можно отжимать мобилку у того, с кем вместе семки лузгал? Хоть и виртуальные… =)
                            +1
                            Даешь приложения для отжимания мобилок :)
                            +4
                            Бодрячком программим на Qt? )
                              +1
                              Одно забавно, комменты положительные, а в карму какают тихонечко)
                                0
                                Ну так это Хабр :) Меня заминусовали, когда оставил коммент к топику про какой-то порнушный торрент-сервер. Видимо обиделась аудитория. Сейчас вот тоже заминусуют, чую ;) Хотя чо… хуже не будет.
                                  +1
                                  Ну всегда считал что выбравшие Qt куда более амбициозны и пофигистичны в плане обращения внимания на всякую мелочь типа смайликов в постах и прочее. Ибо если человек по своей воле выбрал лучший фреймворк, значит шестерёнки то крутятся).
                              +3
                              Кстати, для любителей Убунты есть репа с Symbian SDK.
                              +11
                              Дерзко, чо.
                                +1
                                Да не, всё вроде ровно, по понятиям. Пацан к успеху идёт!
                                  0
                                  А я чо говорю — дерзко, чо.
                                  Пасан к успеху уже пришел.
                                +7
                                Небольшое замечание по сути: сидят не на корточках, а на кортах или, в крайнем случае, на кортофанах
                                  0
                                  На кортках.
                                  +1
                                  Ахаха братюня, дай Qt с камерой позвонить?
                                    0
                                    Интересно. Спасибо, пишите еще!
                                    Вопрос на засыпку: а что там с Android? По-моему, Lighthouse еще толком не работает. Или я что-то упустил?
                                      0
                                      Lighthouse уже готов. Это ведь абстракция. Он ещё пилится в ветке 4.8 и 5.0, но порты основанные на нём уже достаточно работоспособны.

                                      По сути, в android-lighthouse уже более-менее работает чуть ли ни всё… Ну кроме Phonon-а, ибо нет бэкэнда… Так что приложения пока без звука. Самое интересное что у них уже есть работающий плагин для Qt Creator-а, позволяющий так же легко собирать apk, ставить и запускать их в Android эмуляторе стоящем на машине, одним нажатием по кнопке Run. И собранное приложение само подтянет все необходимые ему модули библиотеки.

                                      И да, в necessitas теперь нормальный инсталлятор и доступна версия под Windows.
                                        0
                                        Спасибо, не знал.
                                        Ёлки-палки, я ж сегодня спать не буду :(.
                                          +1
                                          Вот могёте и семку под андроид собрать, да выложить в качестве практики… Как-то же наверняка я могу дать доступ к проекту на Google Code?
                                            0
                                            Да, можете.
                                            Давайте пока спешить не будем, как получится что-нибудь — я отпишусь.
                                              0
                                              Ладушки.
                                                +1
                                                Necessitas завелся после двух часов пинаний и гугла.
                                                Всё, что я на даный момент могу сказать — это FUCK YEAH!
                                                Семки теперь и на Android-е!
                                                  0
                                                  Да, кстати, весь код, причастный к звуку, пришлось вырезать :(.
                                                    0
                                                    И еще скриншот:
                                                    СемкО на Андроиде
                                                    Правда, семки почему-то рваные, но это фигня. На девайсе они нормальные.
                                                      0
                                                      Видимо системная локаль эмулятора не русская? Или Qt для андроида не научился её определять…
                                                        0
                                                        Это не эмулятор, это скриншот с железки. А локаль английская, да.
                                                      0
                                                      Это да тоже пока убивает… Положил в загрузки на страничке проекта. Хотя можно было бы ifdef расставить.
                                                        0
                                                        Можно было бы, конечно. Только вот зачем? ;)
                                                          0
                                                          в svn, так сказать в основную ветку =)))
                                                            0
                                                            Убедили :). Если найду, к какому define-у можно привязаться — сделаю патч.
                                                              0
                                                              Увы, не нашёл.
                                                                0
                                                                #ifdef Q_WS_ANDROID тип того =))
                                                                Да в принципе ладно. не так всё это важно)
                                                                  0
                                                                  Нету.
                                                                  Я хотел привязаться к #ifndef QT_NO_PHONON, но остается проблема линковки.
                                                                    0
                                                                    В PRO файлике можно указывать так:
                                                                    android {
                                                                    QT == phonon
                                                                    }

                                                                    Это отменяет линковку с фононом.
                                                                      0
                                                                      QT -= phonon конечно же…
                                                                        0
                                                                        Мне это не сильно нравится. Если уж привязываться — так к чему-то одному. Как по мне, к phonon-у правильней.
                                        –4
                                        Боже, какие же вы убогие с этими шуточками шаблонными про гопников, которые уже настоебали за последние лет пять. И нашурашшу с камедиклабом смотрите, наверное, да?
                                          +4
                                          Конечно. Я — ничего не умеющее, шаблонно мыслящее убогое быдло =))
                                            –6
                                            Если ты считаешь, что сейчас и с темой топика ты очень тонко пошутил, то я даже не знаю что тебе ответить. Дурновкусие и полное отсутсвие чувства юмора, кстати, не означают шаблонное мышление. Ты можешь быть замечательным программистом, отцом или водителем, но шутить тебе явно противопоказано. И в карму тебе капает, сдаётся мне, за это. Только минусующие боятся, что те, кто оценивает подобный юмор, заминисуют к чертям и минусуют молча. А я, идиот, как всегда на рожон лезу.
                                              +1
                                              Ну на самом деле я не думаю что стоит и Вас минусовать и кого бы то ни было, за критику. Я не пытаюсь кого-то нарочно насмешить или выпендриться, для меня просто напросто не важно кто, чего и как подумает. Писал статейку, не обдумывая как оно будет лучше смотреться, а просто в ключе того стёба, который у нас как-то на паре случился. Возможно с возрастом придёт и ко мне более серьёзное отношение к выражению своих мыслей, но сейчас мне это действительно кажутся забавными подобные фразы, зачем раньше времени насильно из себя выбивать дурь? Успеется…

                                              Ну и кстати, тот кто хотел, легко взглядом всю мишуру по диагонали прочитал и остановился на главном — что-то делать на Qt действительно легко, прикольно и быстро. Если у Вас есть конкретные советы по тому как стоило оформлять статью, прошу выскажитесь. А я почитаю да возьму на заметку.
                                                –2
                                                Я не трогаю техническую часть, в этой отрасли программирования я полнейший профан, ровно как и в написании статей. Я заметил лишь то, что на ресурсе, 99% пользователей которого, причисляют себя к интеллектуалам и стараются такими выглядеть немного стрёмно видеть статью с таким плоским и отвратительным описанием простой вещи. И не менее отвратительно видеть простыню острословов выше, пытающихся шутить не менее отвратно. Грустно, товарищи. На лепре той же любой пост с такими шуточками или удалили бы моментально или слили бы по самое некуда. А тут вон — радуются даже.
                                                  +1
                                                  Потому что здесь у людей достаточно высокая самооценка чтобы понимать — это лишь стёб (тупой и о тупом), а следовательно относится к нему нужно снисходительно и с улыбкой.

                                                  Это как с Иисусом, все ученики внезапно оказались такими важняцкими что «Боже упаси, чтобы я ноги мыл соседу, как же, как же!». К чему эта гордыня… Открыл. Глянул. Улыбнулся. Подумал «Дибилушка =))». Закрыл и забыл…
                                                    +2
                                                    Молодец, респект. 21 год, образование, язык, грамотность, делаешь что-то (сегодня семки, завтра видно будет, разработка под мобильные платформы — ведущий тренд, товарищ недавно был в Силиконовой Долине, я ему верю), критику держишь любую, Казахстан — еще +10 баллов, как по мне.

                                                    А кто говорит, что стиль изложения убог, или еще что не так — пусть возьмет и напишет по-своему, правильно. И все будет, не так ли?
                                                      0
                                                      Благодарю за поддержку. Всему своё время…
                                                    0
                                                    «В этой отрасли программирования я полнейший профан» и «отвратительным описанием простой вещи» — как-то не вяжется. Как можно понять, насколько она простая, если не разбираться в вопросе?
                                                    0
                                                    Вот именно что статейку… стиль изложения убог. Но тем не менее, статья может кого-то подстегнуть на собственные эксперименты. Сменить бы общий тон статьи и раскрыть какие-нибудь не очень однозначные моменты и было бы гораздо лучше.
                                                    0
                                                    Вы просто решили выделиться. Ничего выдающегося в ваших словах нету и ваш высокий интеллект они не показывают.
                                                      –3
                                                      То есть, мое, вполне справедливое замечание — совсем мимо и я решил повыделываться просто? И топик — действительно блещет умом и юмором, в отличии от меня? ОК
                                                        0
                                                        Считайте так.
                                                          +3
                                                          в отличии от меня
                                                          Да, именно так.
                                                            +3
                                                            ОК
                                                            0
                                                            Товарищ whynot, по-моему топик был был в первую очередь о простоте портирования QT-приложений. А гопота — это уже так, между делом. Для придания окраски.
                                                            +1
                                                            > Ничего выдающегося в ваших словах нету…

                                                            А если найду?
                                                          0
                                                          ну как-бы обратное не доказано. топик на хабре с хэллоуворлдом и гоп-юмором (который и правда аут оф трэнд) не в счёт. лето.
                                                            0
                                                            Было бы весело, если бы не было так грустно то, что для симбиана 80% игрушек по функционалу далеко от этой не ушли.
                                                              0
                                                              точно. к сожалению.
                                                              хах а ещё мне кажется, что ни один чоткий пацанчик не употребит слово «лузгать». почему-то
                                                                0
                                                                Да это у нас тут из местного колорита…
                                                                  +1
                                                                  У нас на районе говорят «щелкАть».
                                                                –1
                                                                Вы идиот или притворяетесь? Название Nokia N-gage вам о чем-то говорит? Под Symbian еще до выхода iOS и уж тем более ведроида было создано огромное количество великолепных 3D игр, с удобнейшим управлением и шикарным геймплеем.
                                                                Так что не зная матчасти не лезте на хабр.
                                                                  +2
                                                                  А вот зря вы на человека наехали. Да, есть небольшое количество крутых игр под симбу, но 80% — это мини-казуалки, как описаны в топике.
                                                                    +1
                                                                    ru.wikipedia.org/wiki/N-gage почитайте про небольшое количество игр =)
                                                                    Я помню еще на SX-1 устанавливал игры и играл в pandemonium и fifa. Это было уже очень давно. То, что сейчас для симбы говнокодеры типа ТС клепают говноигры ни о чем не говорит.
                                                                      +1
                                                                      Говорит о том, что говнокодеры клепают говноигры, а Вы — хамло.
                                                                        +1
                                                                        Я наехал на человека потому, что стыдно быть на хабре и не знать матчасть (в данном случае историю Симбы, которую я знаю начиная с одного из первых смартов — Siemens SX1).
                                                                        Это то же самое, как если бы человек попробовал убунту и сказал, что линукс плох тем, что у него нет консоли, просто потому, что он по своей юности и неопытности не застал этот период =)
                                                                          +1
                                                                          А где вы видели, что человек сказал, что игр под симбу нету? Чего стоит только замечательная (путь и, с технической точки зрения не особо выдающаяся) Bounce! Но большинство игр — шлак. Говорю как обладатель Нокии 6630.
                                                                            +1
                                                                            ниже прогуляйтесь. Под вашу 6630 доступно большинство нижеперечисленных игр.
                                                                              +1
                                                                              Я не спорю. Вы указали 37 игр. А сколько говноигр? Сотни? Тысячи? Явно в четыре раза больше, чем крутых игрушек. Вот вам и 80%.
                                                                            +1
                                                                            Во первых, где сейчас n-gage? А во вторых с каких пор «не знать что-то» = «стыдно»? Говорю о том что знаю, под мой Symbian 9.4 нормальных игры по сути нет.
                                                                          0
                                                                          Игры
                                                                          Для Nokia N-Gage выпущены следующие игры (официально они не переводились на русский язык, кроме Call of Duty):
                                                                          Alien Front
                                                                          Ashen
                                                                          Asphalt Urban GT
                                                                          Asphalt Urban GT 2
                                                                          Atari Masterpieces Vol. I
                                                                          Atari Masterpieces Vol. II
                                                                          Bomberman
                                                                          Call of Duty
                                                                          Catan
                                                                          Civilization
                                                                          Colin McRae Rally 2005
                                                                          Crash Nitro Kart
                                                                          FIFA Football 2004
                                                                          FIFA Football 2005
                                                                          Flo Boarding (Europe only)
                                                                          Glimmerati
                                                                          High Seize
                                                                          King of Fighters EXTREME
                                                                          Marcel Desailly Pro Soccer
                                                                          Mile High Pinball
                                                                          MLB Slam
                                                                          Moto GP
                                                                          NCAA Football 2004
                                                                          ONE
                                                                          Operation Shadow
                                                                          Pandemonium
                                                                          Pathway to Glory
                                                                          Pathway to Glory: Ikusa Islands
                                                                          Payload
                                                                          Pocket Kingdom
                                                                          Puyo Pop
                                                                          Puzzle Bobble VS
                                                                          Rayman 3
                                                                          Red Faction
                                                                          Requiem of Hell
                                                                          Rifts: Promise of Power
                                                                          Snakes
                                                                          Sega Rally
                                                                          SonicN
                                                                          Spider-Man 2
                                                                          SSX: Out of Bounds
                                                                          Super Monkey Ball
                                                                          System Rush
                                                                          The Elder Scrolls Travels: Shadowkey
                                                                          The Roots: Gates of Chaos
                                                                          The Sims Bustin' out
                                                                          Tiger Woods PGA Tour 2004
                                                                          Tom Clancy's Ghost Recon: Jungle Storm
                                                                          Tom Clancy's Splinter Cell: Chaos Theory
                                                                          Tom Clancy's Splinter Cell: Team Stealth Action
                                                                          Tomb Raider
                                                                          Tony Hawk's Pro Skater
                                                                          Virtua Tennis
                                                                          Virtua Cop
                                                                          Warhammer 40,000
                                                                          Worms World Party
                                                                          WWE Aftershock
                                                                          Xanadu Next
                                                                          X-Men Legends
                                                                          X-Men Legends II: Rise of Apocalypse
                                                                –1
                                                                а зачем вы этот комментарий написали?
                                                                  0
                                                                  чтобы ты спросил, не очевидно разве?
                                                                +2
                                                                Чтобы быть чётким, надо чтобы семки были в тебе.
                                                                • UFO just landed and posted this here
                                                                    0
                                                                    Не смотря на его неоднозначность, qml тоже неплохая штука… =) Но пока многие вещи проще делать нативно)
                                                                    • UFO just landed and posted this here
                                                                    0
                                                                    Желтая тема Win 7 призывает сомнение вашей четкости.
                                                                      0
                                                                      Ну вот нету официальных драйверов для nvidia optimus под ubuntu =)

                                                                    Only users with full accounts can post comments. Log in, please.