Ustvarjanje aplikacije za Ubuntu Touch [QML] - [2. del]

Uvod:

No, tukaj imamo prispevek, ki sledi prvi delV tem se bomo osredotočili na obdelavo podatkov (vprašanj) in začeli bomo z logičnim delom igre, v naslednjem bomo zaključili logiko in izvedli čas in tri možnosti.

Kodo najdete v mojem skladišču Launchpad (kliknite tukaj), kjer ga bom sproti posodabljal.

Baza podatkov:

Za bazo podatkov bomo uporabili u1db, ki je baza podatkov, ki podatke shrani v formatu JSON.

Najprej poglejmo, katere podatke bi morali shraniti, imamo 1 vprašanje (poleg besedila vprašanja bi bilo lepo imeti tudi identifikator), s 4 možnimi odgovori, od katerih je lahko samo 1, zato je dokument v JSON eno vprašanje naj bo:

{ "id": 1, "question": " tam bo razv.desdelinux.net ", "odgovori" : { r1: "da", r2: "ne", r3: "ne vem", r4: "to je napačen odgovor" }, "pravilno": 3 }

Kot vidimo, smo strukturirani v obliki JSON kjer imamo identifikator, niz z vprašanjem in r1, r2, ki predstavljata odgovor 1 in odgovor 2, končno imamo, kateri od odgovorov je pravilen.

Poglejmo nekoliko, kako deluje U1db, prva stvar, ki jo moramo storiti, da uporabimo U1db, je uvoz modula:

import U1db 1.0 as U1db

Izjavljamo bazo podatkov:

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

Podatkovne baze bodo shranjene kot aU1DbDatabase.u1db, zdaj ustvarimo dokument:

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

Kjer lahko vidimo obliko {«zdravo»: «nekaj»}, za izvajanje poizvedb, bodisi za dodajanje podatkov, pridobivanje podatkov, brisanje itd. Imamo element U1db.Query.

Lahko najdemo Navodila na razvojni spletni strani Ubuntu.

Pojdimo na našo aplikacijo in ustvarite svojo bazo podatkov, kot smo videli, definiramo bazo podatkov:

U1db.Database {id: db vprašanja; pot: "questionsdb.u1db"}

V redu, zdaj vstavimo nekaj privzetih elementov v dokument zbirke podatkovdb:

    U1db.Document { id: aDocument database: questionsdb docId: 'questions' create: true defaults: { "questions": [ {"question":"Tam bo razv.desdelinux.net?", "r1":"da", "r2":"ne", "r3":"nos", "r4":"napačen odgovor", "pravilno": "3" }, {"vprašanje ":"Kdo je Hagrid (Harry Potter)?", "r1":"Podravnatelj šole", "r2":"Čuvar igre", "r3":"Učitelj transformacije", "r4":" Prefekt", "pravilno": "2"}, {"vprašanje":"Kaj je glavno mesto Islandije?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "pravilno": "2"} ] } }

Zavedam se, da koda ni prikazana, kot bi morala, toda če pogledamo, bomo videli, da imamo element vprašanja, ki z »[]» določimo, da je lahko več (niso statični) elementov; v tem primeru bomo imeli privzeto 4, 4 vprašanja z njihovimi odgovori.

Da dobite elemente dokumenta JSON, lahko določimo identifikator dokumenta, ki smo ga ustvarili (ki je aDokumenta). Predstavljajmo si, da želimo dobiti besedilo prvega vprašanja:

aDocument.contents.questions [0] .question

Ta vrstica kode nam vrne vsebino vprašanja dokumenta aDocument, elementa 0 (prvega v indeksu), ki je: «Tam bo dev.desdelinux.mreža?" Če v indeks postavimo številko 1, potem je to drugo vprašanje.

Programiranje logike igre

No, zdaj, ko vemo, kako ravnati z bazo podatkov, kamor smo shranili vprašanja, bomo programirali logiko igre. Najprej bomo ustvarili datoteko JavaScript (.js): Dodaj novo -> Qt -> Js datoteka. Poklical ga bom logic.js.

V datoteki bomo ustvarili več funkcij za uvoz datoteke js v naš dokument qml:

uvozi "logica.js" kot Logica

Ime Logica povežemo, zato, ko želimo poklicati funkcijo, bomo to storili kot Logica.funcion (), kot da bi šlo za objekt, ki ima svoje metode.

Za zdaj, da objava ne bo predolga, bomo čas vprašanja in možnosti pustili za kasneje, osredotočili se bomo na vprašanja in točke, poglejmo funkcijo, s katero bomo nadaljevali od vprašanje:

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

Kot vidimo, kot argument posredujemo številko vprašanja, kjer smo, od tu pa odgovori na gumbe in oznako vprašanja. Poglejmo zdaj, da preverimo, ali je izbrani odgovor pravilen:

zadetek funkcije (številka, možnost) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; če je (možnost == pravilna_številka) zadetek = res; povratni zadetek; }

Koda govori sama zase, če bo izbrana možnost enaka tisti, ki jo ponuja baza podatkov, bo res, sicer ne. Zdaj, ko imamo te funkcije definirane, jih bomo uporabili v naši kodi qml.

Najprej bomo dodali spremenljivko, ki bo nadzorovala, v katerem vprašanju smo, imenovali jo bomo num; Imeli bomo tudi še tri spremenljivke: zadetki, zgrešitve in točke.

    lastnost int številka: 0 lastnost int nfaults: 0 lastnost int rojstev: 0 lastnost int npoints: 0

Sprva so vsi na 0.

Zdaj na vse gumbe za odgovore dodamo onClick. onClick, kot že samo ime pove, je dogodek, ki se bo zgodil s klikom na gumb:

            Gumb {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextPregunta (num) npoints = npoints + 50 rojstev = rojstev + 1} else {nfaults = nfaults + 1}}}

Vidimo, da ko kliknete gumb, preveri, ali je pravilen ali ne, če je, doda točke in poda vprašanje, sicer ostane eno življenje.

Končno bomo izvedli prvo vprašanje, ko se naloži komponenta Page:

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

Poglejmo, kako se je izkazalo:

Test


Pustite svoj komentar

Vaš e-naslov ne bo objavljen. Obvezna polja so označena z *

*

*

  1. Za podatke odgovoren: Miguel Ángel Gatón
  2. Namen podatkov: Nadzor neželene pošte, upravljanje komentarjev.
  3. Legitimacija: Vaše soglasje
  4. Sporočanje podatkov: Podatki se ne bodo posredovali tretjim osebam, razen po zakonski obveznosti.
  5. Shranjevanje podatkov: Zbirka podatkov, ki jo gosti Occentus Networks (EU)
  6. Pravice: Kadar koli lahko omejite, obnovite in izbrišete svoje podatke.

  1.   gabielus je dejal

    Sledim korakom in vse deluje. Samo za sodelovanje rečem, da:
    * Ne spremeni vrednosti zadetkov in zgrešenih udarcev. To morate dodati vsakemu gumbu v dogodku klika.
    * In to v vrstici:
    if (Logic.acerto (num, 1)) {
    Za številko gumba / odgovora morate spremeniti 1.

    lolbimbo, tvoj prispevek se mi zdi zanimiv. Upam, da bodo novi tutovi !!!

    Hvala za deljenje.

    1.    lolbimbo je dejal

      Všeč mi je, da ste komentirali te točke, ker v prispevku nisem jasno povedal, še več, ne spomnim se točk, uspehov in neuspehov, če ga pogledate, boste videli, da ko pritisnemo gumb, seštejemo točke uspehov ... vendar se v oznaki ne odražajo, zato jo moramo vstaviti v lastnost besedila, ki prikazuje točke:

      Oznaka {
      id: napake
      besedilo: «Napake:» + nnapake
      barva: "rdeča"
      }

      Oznaka {
      id: zadetkov
      besedilo: «Hiti:» + roj
      }

      Oznaka {
      id: točke
      besedilo: «Točke:» + ntočk
      fontSize: "srednje"
      }

      Pojasnil jo bom tudi v 3. delu.