Vytvorenie aplikácie pre Ubuntu Touch [QML] - [časť 2]

Introducción:

No a máme tu príspevok, ktorý nasleduje po prvá časťV tejto sa zameriame na narábanie s údajmi (otázkami) a začneme logickou časťou hry, v ďalšej dokončíme logiku a implementujeme čas a 3 možnosti.

Kód nájdete v mojom úložisku Launchpad (kliknite sem), kde ho budem priebežne aktualizovať.

Databáza:

Pre databázu, ktorú použijeme u1db, čo je databáza, ktorá ukladá údaje vo formáte JSON.

Najskôr sa pozrime, aké údaje by sme mali uložiť, máme 1 otázku (okrem textu otázky by bolo fajn mať identifikátor), so 4 možnými odpoveďami, z ktorých môže byť iba 1, preto dokument v JSON jedna otázka by mala byť:

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

Ako vidíme, máme štruktúrovaný formát JSON kde máme identifikátor, reťazec s otázkou a r1, r2, ktoré predstavujú odpoveď 1 a odpoveď 2, nakoniec máme, ktorá z odpovedí je správna.

Pozrime sa trochu, ako funguje U1db. Prvá vec, ktorú musíme urobiť, aby sme mohli použiť U1db, je import modulu:

import U1db 1.0 as U1db

Vyhlasujeme databázu:

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

Databázy sa uložia ako aU1DbDatabase.u1db, teraz vytvoríme dokument:

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

Kde vidíme formát {«ahoj»: «niečo»}, na vykonávanie dotazov, buď na doplnenie údajov, na získanie údajov, na ich odstránenie atď. Máme prvok U1db.Query.

Môžeme nájsť a konzultácie na vývojovej webovej stránke ubuntu.

Poďme na našu aplikáciu a vytvorme našu databázu, ako sme videli, definujeme databázu:

U1db.Database {id: db questions; cesta: "questionsdb.u1db"}

Dobre, teraz poďme vložiť niektoré predvolené prvky do otázky v dokumente databázy:

    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"}
                    ] }
    }

Som si vedomý, že kód sa nezobrazuje tak, ako by mal, ale ak sa pozrieme pozorne, uvidíme, že máme prvok dopytovania, ktoré pomocou »[]» určujeme, že môže existovať niekoľko (nie sú to statické) prvky; v takom prípade budeme mať predvolene 4, 4 otázky s príslušnými odpoveďami.

Ak chcete získať prvky dokumentu JSON, môžeme určiť identifikátor dokumentu, ktorý sme vytvorili (čo je aDokument). Predstavme si, že chceme získať text prvej otázky:

aDocument.contents.questions [0] .otázka

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.

Programovanie logiky hry

Teraz, keď vieme, ako zaobchádzať s trochou databázy, do ktorej sme uložili otázky, naprogramujeme logiku hry. Najskôr vytvoríme súbor JavaScript (.js): Pridať nový -> Qt -> súbor Js. Zavolám mu logic.js.

V súbore vytvoríme niekoľko funkcií na importovanie súboru js do nášho dokumentu qml:

importujte súbor „logica.js“ ako Logica

Názov Logica si spájame so sebou, preto keď chceme zavolať funkciu, urobíme ju ako Logica.function (), akoby to bol objekt, ktorý má svoje metódy.

Zatiaľ, aby príspevok nebol príliš dlhý, ponecháme čas otázky a možnosti na neskôr, sústredíme sa na otázky a body, pozrime sa na funkciu, ktorú použijeme na prechod od otázka:

function 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; }

Ako vidíme, číslo otázky odovzdáme tam, kde sme ako argument, a odtiaľto dáva odpovede na tlačidlá a štítok s otázkami. Pozrime sa teraz na overenie, či je vybratá odpoveď správna:

funkcia hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; if (option == correct_num) hit = true; spätný úder; }

Kód hovorí sám za seba, v prípade, že zvolená možnosť bude rovnaká ako tá, ktorú poskytuje databáza, bude to pravda, inak nie. Teraz, keď máme tieto funkcie definované, použijeme ich v našom kóde qml.

Najskôr pridáme premennú, ktorá bude riadiť, v ktorej otázke sa nachádzame, nazvime ju num; Budeme mať tiež ďalšie tri premenné: zásahy, zmeškania a body.

    vlastnosť int počet: 0 vlastnosť int nfaults: 0 vlastnosť int narodenia: 0 vlastnosť int počet bodov: 0

Spočiatku sú všetky na 0.

Teraz pridáme onClick ku všetkým tlačidlám odpovedí. onClick, ako hovorí jeho názov, je udalosť, ktorá sa stane po kliknutí na toto tlačidlo:

            Tlačidlo {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter šírka: parent.width - 20 onClicked: {if (Logic. certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 narodenia = narodenia + 1} else {nfaults = nfaults + 1}}}

Vidíme, že kliknutím na tlačidlo skontroluje, či je alebo nie je správne, v prípade, že je to správne, doplní body a odovzdá otázku, inak zostáva jeden život.

Nakoniec vykonáme načítanie prvej otázky pri načítaní súčasti Stránka:

    Stránka {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Pozrime sa, ako to dopadlo:

test


Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.

  1.   gabielus dijo

    Postupujem podľa krokov a všetko funguje. Len pre spoluprácu hovorím, že:
    * Nezmení hodnotu zásahov a zmeškaní. Toto musíte pridať ku každému tlačidlu v udalosti kliknutia.
    * A to v riadku:
    if (Logic.acerto (num, 1)) {
    Musíte zmeniť 1 ako číslo tlačidla / odpovede.

    lolbimbo, považujem tvoj príspevok za zaujímavý. Dúfam, že nové tutovky !!!

    Vďaka za zdieľanie.

    1.    lolbimbo dijo

      Páči sa mi, že ste sa k týmto bodom vyjadrili, pretože som v príspevku nedal jasne najavo, čo je navyše, nepamätám si tie body, úspechy aj neúspechy, keď sa na to pozriete, uvidíte, že keď klikneme na tlačidlo, pridáme body za úspechy ... ale tie sa v Labele neodrážajú, preto ho musíme vložiť do jeho textovej vlastnosti, ktorá zobrazuje body:

      Štítok {
      id: zlyhania
      text: «Poruchy:» + nfaults
      farba: "červená"
      }

      Štítok {
      id: hity
      text: «Hity:» + nar
      }

      Štítok {
      id: body
      text: «Body:» + nbodov
      fontSize: "stredné"
      }

      Taktiež to objasním v časti 3.