Oprettelse af en app til Ubuntu Touch [QML] - [Del 2]

Introducción:

Nå her har vi det indlæg, der følger første delI denne skal vi fokusere på håndtering af data (spørgsmål), og vi starter med den logiske del af spillet, i den næste vil vi afslutte logikken og implementere tiden og de 3 muligheder.

Du kan finde koden i mit Launchpad-lager (Klik her), hvor jeg opdaterer det, mens jeg går.

Database:

Til den database, vi bruger u1db, som er en database, der gemmer dataene i formatet JSON.

Lad os først se, hvilke data vi skal gemme, vi har 1 spørgsmål (bortset fra teksten til spørgsmålet ville det være rart at have en identifikator) med 4 mulige svar, hvoraf kun 1 kan være, derfor er dokumentet i JSON et enkelt spørgsmål skal være:

{ "id": 1, "question": " der vil være dev.desdelinux.net ", "svar" : { r1: "ja", r2: "nej", r3: "ved ikke", r4: "dette er et falsk svar" }, "korrekt": 3 }

Som vi ser har vi struktureret i format JSON hvor vi har en identifikator, en streng med spørgsmålet og r1, r2, der repræsenterer svar 1 og svar 2, til sidst har vi hvilket af svarene der er korrekt.

Lad os se lidt, hvordan U1db fungerer, den første ting, vi skal gøre for at bruge U1db, er at importere modulet:

import U1db 1.0 as U1db

Vi erklærer databasen:

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

Databaserne gemmes som aU1DbDatabase.u1db, nu opretter vi et dokument:

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

Hvor vi kan se formatet {«hej»: «noget»}, til at udføre forespørgsler, enten for at tilføje data, indhente data, slette dem osv. Vi har U1db.Query-elementet.

Vi kan finde en tutorial på udviklingswebstedet for Ubuntu.

Lad os gå til vores applikation og oprette vores database, som vi har set definerer vi databasen:

U1db.Database {id: db spørgsmål; sti: "spørgsmåldb.u1db"}

Okay, lad os nu sætte nogle standardelementer i databasedokumentets spørgsmåldb:

    U1db.Document { id: aDocument database: questiondb docId: 'questions' create: true defaults: { "questions": [ {"question":"Der vil være dev.desdelinux.net ?", "r1":"ja", "r2":"nej", "r3":"næse", "r4":"falskt svar", "korrekt": "3" }, {"spørgsmål ":"Hvem er Hagrid (Harry Potter)?", "r1":"Skolens viceskoleleder", "r2":"Spilholderen", "r3":"Forvandlingslæreren", "r4":" En præfekt", "correct": "2"}, {"question":"Hvad er Islands hovedstad?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "korrekt": "2"} ] } }

Jeg er opmærksom på, at koden ikke vises, som den skal, men hvis vi ser nøje, vil vi se, at vi har et element preguntas, som med »[]» specificerer vi, at der kan være flere (de er ikke statiske) elementer; i dette tilfælde har vi 4 som standard, 4 spørgsmål med deres respektive svar.

For at få dokumentelementerne JSON, kan vi specificere identifikatoren for det dokument, vi har oprettet (hvilket er aDokument). Lad os forestille os, at vi ønsker at få teksten til det første spørgsmål:

aDocument.contents.questions [0] .question

Denne kodelinje giver os spørgsmålsindholdet i dokumentet aDocument, af element 0 (det første i indekset), som er: «Der vil være dev.desdelinux.net?" Hvis vi sætter tallet 1 i indekset, så er det det andet spørgsmål.

Programmering af spillogikken

Nå, nu hvor vi ved, hvordan vi skal håndtere lidt af databasen, hvor vi har gemt spørgsmålene, skal vi programmere spillogikken. Først og fremmest opretter vi en fil JavaScript (.js): Tilføj ny -> Qt -> Js-fil. Jeg ringer til ham logic.js.

I filen skal vi oprette flere funktioner for at importere js-filen til vores qml-dokument:

importer "logica.js" som Logica

Vi forbinder navnet Logica, så når vi vil kalde en funktion, gør vi det som Logica.funcion (), som om det var et objekt, der har dets metoder.

For nu, så posten ikke bliver for lang, forlader vi tidspunktet for spørgsmålet og mulighederne for senere, vi koncentrerer os om spørgsmålene og punkterne, lad os se en funktion, som vi vil bruge til at gå videre fra spørgsmålet:

funktion 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ørgsmålet, hvor vi er, som et argument, og herfra lægger svarene på knapperne og spørgsmåletiketten. Lad os se nu for at validere, om det valgte svar er korrekt:

funktionshit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; hvis (option == correct_num) hit = true; retur hit; }

Koden taler for sig selv, hvis den valgte mulighed er den samme som den, der er leveret af databasen, så er den sand, ellers vil den ikke. Nu hvor vi har defineret disse funktioner, anvender vi dem i vores qml-kode.

Først og fremmest vil vi tilføje en variabel, der styrer, hvilket spørgsmål vi er i, vi kalder det num; Vi vil også have tre flere variabler: hits, miss og point.

    egenskab int num: 0 ejendom int nfault: 0 ejendom int fødsler: 0 ejendom int npoints: 0

Oprindeligt er de alle på 0.

Nu tilføjer vi et onKlik på alle svarsknapperne. onClick, som navnet siger, er en begivenhed, der sker, når der klikkes på denne knap:

            Knap {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} ellers {nfaults = nfaults + 1}}}

Vi ser, at ved at klikke på knappen, kontrollerer det, om det er korrekt eller ej, hvis det er korrekt, tilføj punkterne og bestil spørgsmålet, ellers forbliver et liv tilbage.

Endelig laver vi det første spørgsmål, når sidekomponenten indlæses:

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

Lad os se, hvordan det blev:

prøve


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for dataene: Miguel Ángel Gatón
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.

  1.   gabielus sagde han

    Jeg følger trinene, og alt fungerer. Bare for at samarbejde siger jeg det:
    * Ændrer ikke værdien af ​​hits og miss. Du skal tilføje det til hver knap i din klikbegivenhed.
    * Og det i køen:
    hvis (Logic.acerto (num, 1)) {
    skift 1 til nummeret på knappen / svaret.

    lolbimbo, jeg synes dit bidrag er interessant. Jeg håber nye tutoer !!!

    Tak fordi du delte.

    1.    lolbimbo sagde han

      Jeg kan godt lide, at du har kommenteret disse punkter, fordi jeg ikke gjorde det klart i indlægget. Hvad mere er, jeg kan ikke huske punkterne, succeserne og fiaskoerne. Hvis du ser på det, vil du se, at når vi trykker på knappen, tilføjer vi pointene succeserne ... men de afspejles ikke i etiketten, det er derfor, vi skal sætte det i dets tekstegenskab for at vise punkterne:

      Etiket {
      id: fejl
      tekst: «Fejl:» + nfejl
      farve: "rød"
      }

      Etiket {
      id: hits
      tekst: «Hits:» + født
      }

      Etiket {
      id: point
      tekst: «Point:» + npoints
      fontSize: "medium"
      }

      Jeg vil også præcisere det i del 3.