Crearea unei aplicații pentru Ubuntu Touch [QML] - [Partea 2]

Introducere:

Ei bine, aici avem postarea care urmează prima parteÎn acesta ne vom concentra pe gestionarea datelor (întrebări) și vom începe cu partea logică a jocului, în următoarea vom termina logica și vom implementa timpul și cele 3 opțiuni.

Puteți găsi codul în depozitul meu Launchpad (click aici), unde îl voi actualiza pe măsură ce merg.

Bază de date:

Pentru baza de date vom folosi u1db, care este o bază de date care salvează datele în format JSON.

În primul rând să vedem ce date ar trebui să salvăm, avem 1 întrebare (în afară de textul întrebării, ar fi bine să avem un identificator), cu 4 răspunsuri posibile, dintre care doar 1 poate fi, prin urmare JSON singura întrebare ar trebui să fie:

{ "id": 1, "question": " va exista dev.desdelinux.net ", "răspunsuri" : { r1: "da", r2: "nu", r3: "nu știu", r4: "acesta este un răspuns fals" }, "corect": 3 }

După cum vedem, am structurat în format JSON unde avem un identificator, un șir cu întrebarea și r1, r2 care reprezintă răspunsul 1 și răspunsul 2, în cele din urmă avem care dintre răspunsuri este corect.

Să vedem puțin cum funcționează U1db, primul lucru pe care trebuie să-l facem pentru a utiliza U1db este să importăm modulul:

import U1db 1.0 as U1db

Declarăm baza de date:

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

Bazele de date vor fi salvate ca aU1DbDatabase.u1db, acum creăm un document:

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

Unde putem vedea formatul {«salut»: «ceva»}, pentru a executa interogări, fie pentru a adăuga date, pentru a obține date, pentru a le șterge etc. Avem elementul U1db.Query.

Putem găsi o tutorial pe site-ul de dezvoltare al Ubuntu.

Să mergem la aplicația noastră și să creăm baza de date, așa cum am văzut, definim baza de date:

U1db.Database {id: db întrebări; cale: "questionsdb.u1db"}

Ok, acum să punem câteva elemente implicite în întrebările din baza de date a documentului:

    U1db.Document { id: aDocument database: questionsdb docId: „întrebări” create: true valori implicite: { „întrebări”: [ {"question":"Va exista dev.desdelinux.net ?", "r1":"da", "r2":"nu", "r3":"nas", "r4":"răspuns fals", "corect": "3" }, {"întrebare ":"Cine este Hagrid (Harry Potter)?", "r1":"Directorul adjunct al școlii", "r2":"Păstratorul de vânătoare", "r3":"Profesorul de transformare", "r4":" Un prefect", "corect": "2"}, {"intrebare":"Care este capitala Islandei?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "corect": "2"} ] } }

Sunt conștient că codul nu este afișat așa cum ar trebui, dar dacă ne uităm atent vom vedea că avem un element interogatoriu, care cu »[]» specificăm că pot exista mai multe elemente (nu sunt statice); în acest caz vom avea 4 în mod implicit, 4 întrebări cu răspunsurile lor respective.

Pentru a obține elementele documentului JSON, putem specifica identificatorul documentului pe care l-am creat (care este un document). Să ne imaginăm că vrem să obținem textul primei întrebări:

aDocument.contents.questions [0] .întrebare

Această linie de cod ne returnează conținutul întrebării din documentul aDocument, al elementului 0 (primul din index), care este: «Va fi dev.desdelinux.net?" Dacă punem numărul 1 în index, atunci este a doua întrebare.

Programarea logicii jocului

Ei bine, acum că știm cum să gestionăm un pic din baza de date în care am salvat întrebările, vom programa logica jocului. În primul rând vom crea un fișier JavaScript (.js): Adăugați un nou -> Qt -> fișier Js. Il voi suna logic.js.

În fișier vom crea mai multe funcții, pentru a importa fișierul js în documentul nostru qml:

importați „logica.js” ca Logica

Asociem numele Logica, prin urmare, atunci când dorim să apelăm o funcție, o vom face ca Logica.function (), ca și cum ar fi un obiect care are metodele sale.

Deocamdată, pentru ca postarea să nu devină prea lungă, vom lăsa timpul întrebării și opțiunile pentru mai târziu, ne vom concentra pe întrebări și puncte, să vedem o funcție pe care o vom folosi pentru a trece de la întrebare:

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

După cum putem vedea, trecem numărul întrebării unde ne aflăm ca argument și de aici pune răspunsurile la butoane și eticheta întrebării. Să vedem acum pentru a valida dacă răspunsul selectat este corect:

function hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (opțiune == număr_corect) hit = true; returnează lovitura; }

Codul vorbește de la sine, în cazul în care opțiunea aleasă este aceeași cu cea oferită de baza de date, atunci va fi adevărat, altfel nu. Acum că avem aceste funcții definite, le vom aplica în codul nostru qml.

În primul rând vom adăuga o variabilă care va controla în ce întrebare ne aflăm, o vom numi num; Vom avea și alte trei variabile: lovituri, ratări și puncte.

    proprietate int num: 0 proprietate int nfaults: 0 proprietate int nașteri: 0 proprietate int npoints: 0

Inițial, toate sunt la 0.

Acum adăugăm un onClick la toate butoanele de răspuns. onClick, așa cum spune și numele său, este un eveniment care se va întâmpla când se face clic pe buton:

            Buton {id: resp1 text: "Răspuns 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClick: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextPregunta (num) npoints = npoints + 50 nașteri = nașteri + 1} else {nfaults = nfaults + 1}}}

Vedem că, făcând clic pe buton, verifică dacă este corect sau nu, în cazul în care este corect, adăugați punctele și treceți întrebarea, altfel rămâne o viață.

În cele din urmă, vom încărca prima întrebare când se încarcă componenta paginii:

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

Să vedem cum s-a dovedit:

test


Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Gabelus el a spus

    Urmez pașii și totul funcționează. Doar pentru a colabora, spun că:
    * Nu modifică valoarea loviturilor și ratărilor. Trebuie să adăugați acest lucru la fiecare buton din evenimentul dvs. de clic.
    * Și asta în linie:
    if (Logic.acerto (num, 1)) {
    Trebuie să schimbați 1 pentru numărul butonului / răspunsului.

    lolbimbo, mi se pare interesantă contribuția ta. Sper tutouri noi !!!

    Vă mulțumim pentru distribuire.

    1.    lolbimbo el a spus

      Îmi place că ați comentat aceste puncte pentru că nu am clarificat în postare, mai mult, nu-mi amintesc punctele, succesele și eșecurile, dacă vă uitați la ele veți vedea că atunci când facem clic pe buton, adăugăm punctele succesele ... dar acestea nu sunt reflectate în etichetă, de aceea trebuie să-l punem în proprietatea sa de text pentru a arăta punctele:

      Eticheta {
      id: eșecuri
      text: «Defecte:» + nfaults
      culoarea rosie"
      }

      Eticheta {
      id: accesări
      text: «Afisari:» + nascut
      }

      Eticheta {
      id: puncte
      text: «Puncte:» + npuncte
      fontSize: "mediu"
      }

      O voi clarifica și în partea 3.