Създаване на приложение за Ubuntu Touch [QML] - [Част 2]

Introducción:

Ами тук имаме публикацията, която следва първа частВ тази ще се съсредоточим върху обработката на данните (въпроси) и ще започнем с логическата част на играта, в следващата ще завършим логиката и ще приложим времето и трите опции.

Можете да намерите кода в моето хранилище на Launchpad (щракнете тук), където ще го актуализирам, докато отивам.

База данни:

За базата данни ще използваме u1db, която представлява база данни, която записва данните във формата JSON.

Първо нека видим какви данни трябва да запазим, имаме 1 въпрос (освен текста на въпроса би било хубаво да имаме идентификатор), с 4 възможни отговора, от които може да бъде само 1, следователно документът в JSON един въпрос трябва да бъде:

{
"id": 1,
"pregunta": " habra dev.desdelinux.net ",
"respuestas" : { r1: "si" , r2: "no" , r3: "no se sabe" ,  r4: "esto es una respuesta falsa" },
"correcta": 3
}

Както виждаме, ние сме структурирани във формат JSON където имаме идентификатор, низ с въпроса и r1, r2, които представляват отговор 1 и отговор 2, накрая имаме кой от отговорите е верен.

Нека да видим малко как работи U1db, първото нещо, което трябва да направим, за да използваме U1db, е да импортираме модула:

import U1db 1.0 as U1db

Декларираме базата данни:

U1db.Database {
id: aDatabase
path: "aU1DbDatabase"
}

Базите данни ще бъдат запазени като aU1DbDatabase.u1db, сега създаваме документ:

U1db.Document {
id: aDocument
database: aDatabase
docId: 'helloworld'
create: true
defaults: { "hello": "Hello World!" }
}

Където можем да видим формата {«здравей»: «нещо»}, да изпълняваме заявки, или да добавяме данни, да получаваме данни, да ги изтриваме и т.н. Имаме елемента U1db.Query.

Можем да намерим настойнически на уебсайта за разработка на Ubuntu.

Нека да отидем в нашето приложение и да създадем нашата база данни, както видяхме, дефинираме базата данни:

U1db.Database {id: db въпроси; път: "questionsdb.u1db"}

Добре, нека сега поставим някои елементи по подразбиране в документа на базата данни questionsdb:

    U1db.Document {
        id: aDocument
        database: preguntasdb
        docId: 'preguntas'
        create: true
        defaults: { "preguntas":
                    [
                        {"pregunta":"Habra dev.desdelinux.net ?", 
                        "r1":"si", "r2":"no", "r3":"nose", 
                        "r4":"respuesta falsa", "correcta": "3" },
                        {"pregunta":"Quien es hagrid (harry potter) ?", 
                        "r1":"El vicedirector de la escuela", 
                        "r2":"El guardabosques", 
                        "r3":"El profesor de transformaciones", 
                        "r4":"Un prefecto", 
                        "correcta": "2"},
                        {"pregunta":"¿Cúal es la capital de Islandia?", 
                       "r1":"Amsterdam",
                       "r2":"Reykjavik", 
                       "r3":"Tiflis", 
                       "r4":"Almaty",
                       "correcta": "2"}
                    ] }
    }

Наясно съм, че кодът не се показва както трябва, но ако се вгледаме внимателно, ще видим, че имаме елемент preguntas, което с »[]» посочваме, че може да има няколко (те не са статични) елементи; в този случай ще имаме 4 по подразбиране, 4 въпроса със съответните им отговори.

За да получите елементите на документа JSON, можем да посочим идентификатора на документа, който сме създали (който е aДокумент). Нека си представим, че искаме да получим текста на първия въпрос:

aDocument.contents.questions [0] .question

Esta línea de código nos retorna el contenido de pregunta del documento aDocument, del elemento 0 (el primero del índice), que es: «Habra dev.desdelinux.net?». Si ponemos en el índice el número 1, entonces seáa la segunda pregunta.

Програмиране на логиката на играта

Е, сега, когато знаем как да боравим с част от базата данни, където сме запазили въпросите, нека програмираме логиката на играта. На първо място ще създадем файл JavaScript (.js): Добавяне на нов -> Qt -> Js файл. Ще му се обадя logic.js.

Във файла ще създадем няколко функции, за да импортираме js файла в нашия qml документ:

импортирайте "logica.js" като Logica

Свързваме го с името Logica, затова, когато искаме да извикаме функция, ще го направим като Logica.funcion (), сякаш е обект, който има своите методи.

Засега, за да не стане твърде дълъг постът, ще оставим времето на въпроса и опциите за по-късно, ще се концентрираме върху въпросите и точките, нека видим функция, която ще използваме, за да преминем от въпрос:

функция nextQuestion (num) {// time = 0 question.text = aDocument.contents.questions [num] .question; resp1.text = aDocument.contents.questions [num] .r1; resp2.text = aDocument.contents.questions [num] .r2; resp3.text = aDocument.contents.questions [num] .r3; resp4.text = aDocument.contents.questions [num] .r4; }

Както виждаме, ние предаваме номера на въпроса там, където се намираме като аргумент и от тук той поставя отговорите на бутоните и етикета на въпроса. Нека да видим сега, за да проверим дали избраният отговор е верен:

хит на функция (num, опция) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; ако (опция == правилен_ номер) хит = вярно; обратен удар; }

Кодът говори сам за себе си, в случай че избраната опция е същата като тази, предоставена от базата данни, тогава тя ще бъде вярна, в противен случай няма. Сега, когато имаме дефинирани тези функции, ще ги приложим в нашия qml код.

На първо място ще добавим променлива, която ще бъде тази, която контролира кой въпрос сме, ще я наречем num; Ще имаме и още три променливи: попадения, пропуски и точки.

    property int num: 0 property int nfaults: 0 property int rođenja: 0 property int npoints: 0

Първоначално всички те са на 0.

Сега добавяме onClick към всички бутони за отговор. onClick, както казва името му, е събитие, което ще се случи при щракване върху бутона:

            Бутон {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 раждания = раждания + 1} else {nfaults = nfaults + 1}}}

Виждаме, че когато щракнете върху бутона, той проверява дали е правилен или не, ако е, добавете точките и преминете въпроса, в противен случай остава един живот.

Накрая ще направим първия въпрос за зареждане, когато компонентът на страницата се зареди:

    Страница {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Нека да видим как се получи:

тест


Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорен за данните: Мигел Анхел Гатон
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Габиелус каза той

    Следвам стъпките и всичко работи. Само за сътрудничество казвам, че:
    * Не променя стойността на попаденията и пропуските. Трябва да добавите това към всеки бутон във вашето събитие за кликване.
    * И това в реда:
    if (Logic.acerto (num, 1)) {
    променете 1 на номера на бутона / отговора.

    lolbimbo, намирам вашия принос за интересен. Надявам се нови уроци !!!

    Благодаря за споделянето.

    1.    лолбимбо каза той

      Харесва ми, че сте коментирали тези точки, защото не дадох ясно да се разбере в публикацията, още повече, не помня точките, успехите и неуспехите, ако го погледнете ще видите, че когато натиснем бутона, добавяме точките успехите ... но те не са отразени в етикета, затова трябва да го поставим в свойството text, за да покажем точките:

      Етикет {
      id: неуспехи
      текст: «Грешки:» + nгрешки
      цвят: "червен"
      }

      Етикет {
      id: удари
      текст: «Посещения:» + род
      }

      Етикет {
      id: точки
      текст: «Точки:» + n точки
      fontSize: "среден"
      }

      Ще го изясня и в част 3.