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

Uvod:

Pa, evo posta koji slijedi prvi deoU ovom ćemo se usredotočiti 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), sa 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 lažan odgovor" }, "tačno": 3 }

Kao što vidimo strukturirali smo se u formatu JSON tamo gdje imamo identifikator, niz s pitanjem i r1, r2 koji predstavljaju odgovor 1 i odgovor 2, konačno imamo koji je od odgovora tačan.

Pogledajmo malo kako funkcionira U1db, prva stvar koju 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 a tutorski na web stranici za razvoj Ubuntu.

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

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

Dobro, stavimo sada neke zadane elemente u dokument baze podataka questionsdb:

    U1db.Document { id: aDocument baza podataka: questionsdb docId: 'pitanja' create: true defaults: { "questions": [ {"question":"Biće dev.desdelinux.net ?", "r1":"da", "r2":"ne", "r3":"nos", "r4":"lažan odgovor", "tačno": "3" }, {"pitanje ":"Ko je Hagrid (Hari Poter)?", "r1":"Zamenik direktora škole", "r2":"Lovočuvar", "r3":"Učitelj transformacije", "r4":" Prefekt", "ispravno": "2"}, {"pitanje":"Koji je glavni grad Islanda?", "r1":"Amsterdam", "r2":"Rejkjavik", "r3":" Tbilisi ", "r4":"Almaty", "ispravno": "2"} ] } }

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

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

aDocument.contents.questions [0] .question

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

Programiranje logike igre

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

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

uvezi "logica.js" kao Logica

Povezujemo ime Logica, pa kad želimo pozvati funkciju, učinit ćemo to kao Logica.function (), kao da je riječ o objektu koji ima svoje metode.

Za sada, kako post ne bi postao predug, ostavićemo vrijeme pitanja i mogućnosti za kasnije, koncentrirat ćemo se na pitanja i točke, pogledajmo funkciju kojom ćemo prijeći na 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 stavljamo odgovore na gumbe i oznaku pitanja. Pogledajmo sada da provjerimo je li odabrani odgovor tačan:

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

Kôd govori sam za sebe, u slučaju da je izabrana opcija ista kao ona koju pruža baza podataka, tada će biti istinita, inače neće. Sada kada smo definirali ove funkcije, primijenit ćemo ih u našem qml kodu.

Prije svega ćemo dodati varijablu koja će biti ona koja kontrolira 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 dodajemo onClick na sva dugmad za odgovore. onClick, kao što mu i samo ime kaže, događaj je koji će se dogoditi kada se klikne na dugme:

            Dugme {id: resp1 tekst: "Odgovor 1" sidra.horizontalCenter: nadređeni.horizontalCenter širina: nadređena širina - 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 dugme provjerava je li ispravno ili nije, u slučaju da je točno, dodaje bodove i predaje pitanje, u suprotnom ostaje jedan život.

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

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

Da vidimo kako je ispalo:

test


2 komentara, ostavi svoj

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.

  1.   gabielus rekao je

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

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

    Hvala na dijeljenju.

    1.    lolbimbo rekao je

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

      Oznaka {
      id: neuspjesi
      tekst: «Kvarovi:» + nneispravnosti
      boja: "crvena"
      }

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

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

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