Opprette en app for Ubuntu Touch [QML] - [Del 2]

Introducción:

Vel her har vi innlegget som følger del enI denne skal vi fokusere på å håndtere dataene (spørsmål), og vi vil starte med den logiske delen av spillet, i den neste vil vi fullføre logikken og implementere tiden og de 3 alternativene.

Du finner koden i Launchpad-arkivet mitt (Klikk her), der jeg oppdaterer den mens jeg går.

Database:

For databasen vil vi bruke u1db, som er en database som lagrer dataene i formatet JSON.

Først av alt, la oss se hvilke data vi skal lagre, vi har 1 spørsmål (bortsett fra teksten til spørsmålet, ville det vært fint å ha en identifikator), med 4 mulige svar, hvorav bare 1 kan være, derfor er JSON ett spørsmål bør være:

{ "id": 1, "question": " det vil være dev.desdelinux.net ", "svar" : { r1: "ja", r2: "nei", r3: "vet ikke", r4: "dette er et falskt svar" }, "riktig": 3 }

Som vi ser har vi strukturert i format JSON der vi har en identifikator, en streng med spørsmålet og r1, r2 som representerer svar 1 og svar 2, til slutt har vi hvilket av svarene som er riktig.

La oss se litt hvordan U1db fungerer, det første vi må gjøre for å bruke U1db er å importere modulen:

import U1db 1.0 as U1db

Vi erklærer databasen:

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

Databasene lagres som aU1DbDatabase.u1db, nå oppretter vi et dokument:

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

Hvor vi kan se formatet {«hei»: «noe»}, for å utføre spørsmål, enten for å legge til data, skaffe data, slette dem etc. Vi har U1db.Query-elementet.

Vi kan finne en tutorial på utviklingsnettstedet til Ubuntu.

La oss gå til applikasjonen vår og opprette databasen vår, slik vi har sett definerer vi databasen:

U1db.Database {id: spørsmåldb; sti: "spørsmåldb.u1db"}

OK, la oss nå sette noen standardelementer i databasedokumentets spørsmåldb:

    U1db.Document { id: aDocument database: questiondb docId: 'questions' create: true defaults: { "questions": [ {"question":"There will be dev.desdelinux.net ?", "r1":"ja", "r2":"nei", "r3":"nese", "r4":"falsk svar", "riktig": "3" }, {"spørsmål ":"Hvem er Hagrid (Harry Potter)?", "r1":"Skolens viserektor", "r2":"Spillevakten", "r3":"Forvandlingslæreren", "r4":" En prefekt", "correct": "2"}, {"question":"Hva er hovedstaden på Island?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "correct": "2"} ] } }

Jeg er klar over at koden ikke vises som den skal, men hvis vi ser vil vi se at vi har et element avhør, som med »[]» spesifiserer vi at det kan være flere (de er ikke statiske) elementer; i dette tilfellet vil vi ha 4 som standard, 4 spørsmål med deres respektive svar.

For å få dokumentelementene JSON, kan vi spesifisere identifikatoren for dokumentet vi har opprettet (som er aDokument). La oss forestille oss at vi ønsker å få teksten til det første spørsmålet:

aDocument.contents.questions [0] .question

Denne kodelinjen returnerer oss spørsmålsinnholdet i dokumentet aDocument, av element 0 (den første i indeksen), som er: «There will be dev.desdelinux.nett?" Hvis vi setter tallet 1 i indeksen, så er det det andre spørsmålet.

Programmering av spilllogikken

Nå som vi vet hvordan vi skal håndtere databasen der vi har lagret spørsmålene, skal vi programmere spilllogikken. Først og fremst lager vi en fil Javascript (.js): Legg til ny -> Qt -> Js-fil. jeg skal ringe ham logic.js.

I filen skal vi lage flere funksjoner, for å importere js-filen til vårt qml-dokument:

importer "logica.js" som Logica

Vi forbinder navnet Logica, derfor vil vi gjøre det som Logica.funcion () når vi vil kalle en funksjon, som om det var et objekt som har metodene.

For nå, slik at innlegget ikke blir for langt, vil vi la tiden for spørsmålet og alternativene for senere, vi vil konsentrere oss om spørsmålene og poengene, la oss se en funksjon som vi vil bruke til å gå videre fra spørsmål:

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

Som vi kan se, passerer vi spørsmålsnummeret der vi er som et argument, og herfra setter det svarene på knappene og spørsmålsetiketten. La oss nå se etter å validere om det valgte svaret er riktig:

funksjonstreff (num, alternativ) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; hvis (alternativ == korrekt_nummer) treff = sant; retur hit; }

Koden taler for seg selv, hvis det valgte alternativet er det samme som det som tilbys av databasen, vil det være sant, ellers ikke. Nå som vi har definert disse funksjonene, vil vi bruke dem i qml-koden vår.

Først og fremst vil vi legge til en variabel som vil kontrollere hvilket spørsmål vi er i, vi vil kalle det num; Vi vil også ha tre variabler til: treff, tap og poeng.

    property int num: 0 property int nfaults: 0 property int births: 0 property int npoints: 0

Opprinnelig er de alle på 0.

Nå legger vi til en onKlikk på alle svarsknappene. onClick, som navnet sier, er en hendelse som vil skje når du klikker på denne knappen:

            Knapp {id: resp1 tekst: "Svar 1" anchors.horizontalCenter: parent.horizontalCenter bredde: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 fødsler = fødsler + 1} annet {nfaults = nfaults + 1}}}

Vi ser at når du klikker på knappen, sjekker den om den er riktig eller ikke, hvis den er, legger til poengene og bestiller spørsmålet, ellers gjenstår ett liv.

Til slutt vil vi lage den første spørsmålsbelastningen når sidekomponenten lastes:

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

La oss se hvordan det ble:

test


Legg igjen kommentaren

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Kontroller SPAM, kommentaradministrasjon.
  3. Legitimering: Ditt samtykke
  4. Kommunikasjon av dataene: Dataene vil ikke bli kommunisert til tredjeparter bortsett fra ved juridisk forpliktelse.
  5. Datalagring: Database vert for Occentus Networks (EU)
  6. Rettigheter: Når som helst kan du begrense, gjenopprette og slette informasjonen din.

  1.   gabielus sa

    Jeg følger trinnene og alt fungerer. Bare for å samarbeide sier jeg det:
    * Endrer ikke verdien av treff og savner. Du må legge det til hver knapp i klikkhendelsen.
    * Og det i køen:
    hvis (Logic.acerto (num, 1)) {
    du må endre 1 for knapp / svar nummer.

    lolbimbo, jeg synes bidraget ditt er interessant. Jeg håper nye tutoer !!!

    Takk for at du delte.

    1.    lolbimbo sa

      Jeg liker at du har kommentert disse punktene fordi jeg ikke gjorde det klart i innlegget. Dessuten husker jeg ikke poengene, suksessene og feilene, hvis du ser på det vil du se at når vi trykker på knappen, vi legger til poengene suksessene ... men de gjenspeiles ikke i etiketten, det er derfor vi må sette den i tekstegenskapen for å vise poengene:

      Merk {
      id: feil
      tekst: «Feil:» + nfeil
      fargen rød"
      }

      Merk {
      id: treff
      tekst: «Treff:» + født
      }

      Merk {
      id: poeng
      tekst: «Poeng:» + npoeng
      fontSize: "medium"
      }

      Jeg vil også avklare det i del 3.