Izrada aplikacije za Ubuntu Touch [QML] - [2. dio]

Introducción:

Pa, evo posta koji slijedi prvi dioU ovom ćemo se fokusirati na rukovanje podacima (pitanjima), a započet ćemo s logičkim dijelom igre, u sljedećem ćemo završiti logiku i primijeniti vrijeme i 3 opcije.

Kôd možete pronaći u mom spremištu Launchpad (kliknite ovdje), gdje ću ga ažurirati kako idem.

Baza podataka:

Za bazu podataka koju ćemo koristiti u1db, koja je baza podataka koja podatke sprema u formatu JSON.

Prije svega da vidimo koje podatke bismo trebali spremiti, imamo 1 pitanje (osim teksta pitanja bilo bi lijepo imati i identifikator), s 4 moguća odgovora, od kojih samo 1 može biti, dakle dokument u JSON jedno pitanje bi trebalo biti:

{ "id": 1, "question": " bit će dev.desdelinux.net ", "odgovori" : { r1: "da", r2: "ne", r3: "ne znam", r4: "ovo je netočan odgovor" }, "točno": 3 }

Kao što vidimo strukturirani smo u formatu JSON gdje imamo identifikator, niz s pitanjem i r1, r2 koji predstavljaju odgovor 1 i odgovor 2, napokon imamo koji je od odgovora točan.

Pogledajmo malo kako U1db radi, prvo što moramo učiniti da bismo koristili U1db je uvoz modula:

import U1db 1.0 as U1db

Izjavljujemo bazu podataka:

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

Baze podataka bit će spremljene kao aU1DbDatabase.u1db, sada kreiramo dokument:

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

Gdje možemo vidjeti format {«zdravo»: «nešto»}, za izvršavanje upita ili za dodavanje podataka, dobivanje podataka, brisanje itd. Imamo element U1db.Query.

Možemo pronaći udžbenik na web stranici za razvoj Ubuntu.

Idemo na našu aplikaciju i stvorimo našu bazu podataka, kao što smo vidjeli definiramo bazu podataka:

U1db.Database {id: db pitanja; staza: "questionsdb.u1db"}

U redu, sad stavimo neke zadane elemente u dokument baze podataka questionsdb:

    U1db.Document { id: aDocument database: questionsdb docId: 'pitanja' create: true defaults: { "pitanja": [ {"pitanje":"Bit će dev.desdelinux.net?", "r1":"da", "r2":"ne", "r3":"nos", "r4":"lažan odgovor", "točno": "3" }, {"pitanje ":"Tko je Hagrid (Harry Potter)?", "r1":"Zamjenik ravnatelja škole", "r2":"Lovočuvar", "r3":"Učitelj transformacije", "r4":" Prefekt", "ispravno": "2"}, {"pitanje":"Koji je glavni grad Islanda?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "ispravno": "2"} ] } }

Svjestan sam da se kod ne prikazuje kako bi trebao, ali ako dobro pogledamo vidjet ćemo da imamo element ispitivanje, koji s »[]» preciziramo da može biti nekoliko (nisu statični) elemenata; u ovom ćemo slučaju prema zadanim postavkama imati 4, 4 pitanja s odgovarajućim odgovorima.

Da biste dobili elemente dokumenta JSON, možemo odrediti identifikator dokumenta koji smo stvorili (koji je aDokumenta). Zamislimo da želimo dobiti tekst prvog pitanja:

aDocument.contents.questions [0] .pitanje

Ova linija koda vraća nam upitni sadržaj dokumenta aDocument, elementa 0 (prvi u indeksu), koji glasi: «Bit će dev.desdelinux.neto?" Ako stavimo broj 1 u indeks, onda je to drugo pitanje.

Programiranje logike igre

Eto, sad kad znamo kako se nositi s bazom podataka u kojoj smo spremili pitanja, programirat ćemo logiku igre. Prije svega stvorit ćemo datoteku JavaScript (.js): Dodaj novu -> Qt -> Js datoteku. Nazvat ću ga logika.js.

U datoteci ćemo stvoriti nekoliko funkcija za uvoz js datoteke u naš qml dokument:

uvezi "logica.js" kao Logica

Povezujemo ga s imenom Logica, stoga kada želimo pozvati funkciju, učinit ćemo to kao Logica.funcion (), kao da je riječ o objektu koji ima svoje metode.

Za sada, kako post ne bi postao predug, vrijeme pitanja i mogućnosti ostavit ćemo za kasnije, koncentrirat ćemo se na pitanja i točke, pogledajmo funkciju kojom ćemo se kretati od pitanje:

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

Kao što vidimo, broj pitanja prosljeđujemo tamo gdje se nalazimo kao argument i odavde stavlja odgovore na gumbe i oznaku pitanja. Pogledajmo sada da provjerimo je li odabrani odgovor točan:

pogodak funkcije (num, opcija) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (opcija == točan_broj) hit = true; uzvratni udarac; }

Kôd govori sam za sebe, u slučaju da je odabrana opcija jednaka onoj koju pruža baza podataka, tada će biti istinita, inače neće. Sad kad smo definirali ove funkcije, primijenit ćemo ih u našem qml kodu.

Prije svega ćemo dodati varijablu koja će kontrolirati u kojem smo pitanju, nazvat ćemo je num; Također ćemo imati još tri varijable: pogoci, promašaji i bodovi.

    svojstvo int broj: 0 svojstvo int nfaults: 0 svojstvo int rođenja: 0 svojstvo int npoints: 0

U početku su svi na 0.

Sada na sve tipke za odgovore dodajemo onClick. onClick, kao što mu i samo ime kaže, događaj je koji će se dogoditi kad se pritisne taj gumb:

            Gumb {id: resp1 text: "Response 1" sidra.horizontalCenter: parent.horizontalCenter širina: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 rođenja = rođenja + 1} else {nfaults = nfaults + 1}}}

Vidimo da klikom na gumb provjerava je li točan ili nije, u slučaju da je točan, dodaje bodove i prolazi pitanje, u suprotnom ostaje jedan život.

Na kraju ćemo izvršiti učitavanje prvog pitanja kada se učita komponenta stranice:

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

Da vidimo kako je ispalo:

test


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   gabielus dijo

    Slijedim korake i sve funkcionira. Samo za suradnju kažem da:
    * Ne mijenja vrijednost pogodaka i promašaja. To morate dodati svakom gumbu u događaju klika.
    * I to u redu:
    if (Logic.acerto (num, 1)) {
    promijenite 1 na broj gumba / odgovora.

    lolbimbo, vaš doprinos mi je zanimljiv. Nadam se novim tutovima !!!

    Hvala za sudjelovanje.

    1.    lolbimbo dijo

      Sviđa mi se što ste komentirali ove točke jer nisam jasno rekao u postu, štoviše, ne sjećam se bodova, uspjeha i neuspjeha, ako pogledate, vidjet ćete da kad kliknemo gumb, zbrajamo bodove uspjeha ... ali oni se ne odražavaju u Oznaci, zato ga moramo staviti u svojstvo teksta da bi prikazali bodove:

      Oznaka {
      id: neuspjesi
      tekst: «Kvarovi:» + npogreške
      boja: "crvena"
      }

      Oznaka {
      id: pogoci
      tekst: «Hitovi:» + rođ
      }

      Oznaka {
      id: bodovi
      tekst: «Bodovi:» + npoints
      fontSize: "srednji"
      }

      Također ću to pojasniti u 3. dijelu.