Rakenduse loomine Ubuntu Touchi jaoks [QML] - [2. osa]

Introducción:

Siin on meil postitus, mis järgneb esimene osaSelles keskendume andmete (küsimuste) käsitlemisele ja alustame mängu loogikaosaga, järgmises lõpetame loogika ning rakendame aja ja 3 võimalust.

Koodi leiate minu Launchpadi hoidlast (kliki siia), kus ma seda aja jooksul uuendan.

Andmebaas:

Andmebaasi jaoks kasutame u1db, mis on andmebaas, mis salvestab andmed vormingus JSON.

Kõigepealt vaatame, milliseid andmeid peaksime salvestama, meil on 1 küsimus (peale küsimuse teksti oleks tore, kui teil oleks identifikaator), millel on 4 võimalikku vastust, millest ainult 1 võib olla, seetõttu on dokumendis JSON üks küsimus peaks olema:

{ "id": 1, "question": " seal on dev.desdelinux.net ", "vastused" : { r1: "jah", r2: "ei", r3: "ei tea", r4: "see on vale vastus" }, "õige": 3 }

Nagu näeme, oleme struktureeritud vormingus JSON kus meil on identifikaator, string küsimuse ja r1, r2, mis tähistavad vastust 1 ja vastus 2, on lõpuks kumb vastustest õige.

Vaatame veidi, kuidas U1db töötab, esimene asi, mida peame U1db kasutamiseks tegema, on mooduli import:

import U1db 1.0 as U1db

Kuulutame andmebaasi:

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

Andmebaasid salvestatakse kui aU1DbDatabase.u1db, nüüd loome dokumendi:

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

Kust näeme vormingut {«tere»: «midagi»} päringute täitmiseks, kas andmete lisamiseks, andmete hankimiseks, kustutamiseks jne Meil on element U1db.Query.

Leiame a juhendaja veebiarenduse veebisaidil Ubuntu.

Läheme oma rakendusse ja loome oma andmebaasi, nagu nägime, määratlesime andmebaasi:

U1db.Database {id: db küsimused; tee: "questionsdb.u1db"}

Olgu, paneme nüüd andmebaasi dokumendi küsimustele mõned vaikimisi elemendid:

    U1db.Document { id: aDokumendi andmebaas: küsimustedb docId: 'küsimused' create: true defaults: { "questions": [ {"question":"Seal on dev.desdelinux.net ?", "r1":"jah", "r2":"ei", "r3":"nina", "r4":"vale vastus", "õige": "3" }, {"küsimus ":"Kes on Hagrid (Harry Potter)?", "r1":"Kooli direktori asetäitja", "r2":"Mängupidaja", "r3":"Muundamise õpetaja", "r4":" Prefekt", "õige": "2"}, {"question":"Mis on Islandi pealinn?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almatõ", "õige": "2"} ] } }

Olen teadlik, et koodi ei kuvata nii, nagu peaks, kuid tähelepanelikult uurides näeme, et meil on element küsitlemine, mille »[]» abil täpsustame, et elemente võib olla mitu (need pole staatilised); sel juhul on meil vaikimisi 4 küsimust, nende vastustega 4 küsimust.

Dokumendi elementide hankimiseks JSON, saame määrata loodud dokumendi identifikaatori (mis on aDokument). Kujutame ette, et tahame saada esimese küsimuse teksti:

aDocument.contents.questions [0] .question

See koodirida tagastab meile dokumendi aDocument, elemendi 0 (indeksi esimene) küsimuse sisu, mis on: «Seal on dev.desdelinux.net?” Kui paneme indeksisse numbri 1, siis on see teine ​​küsimus.

Mänguloogika programmeerimine

Nüüd, kui teame, kuidas käsitleda andmebaasi, kuhu oleme küsimused salvestanud, programmeerime mänguloogika. Kõigepealt loome faili JavaScript (.js): lisage uus -> Qt -> Js-fail. Ma helistan talle logic.js.

Failis loome mitu funktsiooni, et importida js-fail meie qml-dokumenti:

importige "logica.js" kui Logica

Me seostame nime Logica, seetõttu, kui tahame funktsiooni kutsuda, teeme seda kui Logica.funcion (), justkui objekt, millel on oma meetodid.

Selleks, et postitus liiga pikaks ei läheks, jätame küsimuse aja ja võimalused hilisemaks, keskendume küsimustele ja punktidele, vaatame funktsiooni, mida kasutame küsimuselt edasi liikumiseks:

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

Nagu näeme, edastame argumendina küsimuse numbri, kus me oleme, ja siit paneb see vastused nuppudele ja küsimuse sildile. Vaatame nüüd, et kontrollida, kas valitud vastus on õige:

funktsiooni tabamine (arv, valik) {var hit = false; var num_correcto = aDocument.contents.questions [num] .parandus; if (variant == õige_arv) tab = tõene; tagasilöök; }

Kood räägib enda eest, juhul kui valitud variant on sama, mis andmebaasis pakutakse, on see tõsi, muidu mitte. Nüüd, kui meil on need funktsioonid määratletud, rakendame neid oma qml-koodis.

Kõigepealt lisame muutuja, mis kontrollib, millises küsimuses me oleme, nimetame seda num; Meil on ka veel kolm muutujat: tabamused, möödalaskmised ja punktid.

    atribuudi int number: 0 atribuudi int vead: 0 atribuudi int sünd: 0 vara int npunkti: 0

Esialgu on nad kõik 0-l.

Nüüd lisame kõigile vastamisnuppudele onClick. onClick, nagu nimigi ütleb, sündmus, mis juhtub siis, kui sellele nupule klõpsatakse:

            Nupp {id: resp1 text: "Response 1" ankrud.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 sünnitust = sündid + 1} else {nfaults = nfaults + 1}}}

Näeme, et nupule klõpsates kontrollib see, kas see on õige või mitte, kui on, lisage punktid ja edastage küsimus, vastasel juhul jääb üks elu.

Lõpuks paneme esimese küsimuse laadima, kui lehe komponent laadib:

    Leht {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Vaatame, kuidas see välja kukkus:

test


Jäta oma kommentaar

Sinu e-postiaadressi ei avaldata. Kohustuslikud väljad on tähistatud *

*

*

  1. Andmete eest vastutab: Miguel Ángel Gatón
  2. Andmete eesmärk: Rämpsposti kontrollimine, kommentaaride haldamine.
  3. Seadustamine: teie nõusolek
  4. Andmete edastamine: andmeid ei edastata kolmandatele isikutele, välja arvatud juriidilise kohustuse alusel.
  5. Andmete salvestamine: andmebaas, mida haldab Occentus Networks (EL)
  6. Õigused: igal ajal saate oma teavet piirata, taastada ja kustutada.

  1.   gabielus DIJO

    Järgin samme ja kõik töötab. Lihtsalt koostööks ütlen, et:
    * Ei muuda tabamuste ja möödalaskmiste väärtust. Peate selle lisama oma klikiürituse igale nupule.
    * Ja see reas:
    if (Loogika.acerto (arv, 1)) {
    muutke 1 nupu / vastuse numbriks.

    lolbimbo, minu arvates on teie panus huvitav. Loodan, et uued tutod !!!

    Aitäh jagamast.

    1.    lolbimbo DIJO

      Mulle meeldib, et olete neid punkte kommenteerinud, sest ma ei teinud postituses seda selgeks, mis veelgi enam, ma ei mäleta punkte, õnnestumisi ja ebaõnnestumisi, kui te seda vaatate, näete, et kui me nuppu vajutame, lisame need punktid, mis õnnestuvad ... kuid need ei kajastu sildil, seetõttu peame punktide kuvamiseks selle oma teksti omadusse panema:

      Silt {
      id: ebaõnnestumised
      tekst: «Vead:» + nvead
      värv: "punane"
      }

      Silt {
      id: tabab
      tekst: «Tabamused:» + sünd
      }

      Silt {
      id: punktid
      tekst: «Punktid:» + npunkti
      fontSize: "keskmine"
      }

      Selgitan seda ka 3. osas.