Krei programon por Ubuntu Touch [QML] - [Parto 2]

Enkonduko:

Nu jen ni havas la afiŝon kiu sekvas la unua partoEn ĉi tiu ni celos pritrakti la datumojn (demandoj), kaj ni komencos per la logika parto de la ludo, en la sekva ni finos la logikon kaj efektivigos la tempon kaj la 3 eblojn.

Vi povas trovi la kodon en mia deponejo Launchpad (alklaku ĉi tie), kie mi ĝisdatigos ĝin dum mi iros.

Datumbazo:

Por la datumbazo ni uzos u1db, kiu estas datumbazo, kiu konservas la datumojn en la formato JSON.

Unue ni vidu, kiajn datumojn ni konservu, ni havas 1 demandon (krom la teksto de la demando estus bone havi identigilon), kun 4 eblaj respondoj, el kiuj nur 1 povas esti, do la dokumento en JSON sola demando estu:

{"id": 1, "question": "estos dev.fromlinux.net", "respondoj": {r1: "jes", r2: "ne", r3: "ĝi ne estas konata", r4: "ĉi tio estas falsa respondo "}," ĝusta ": 3}

Kiel ni vidas, ni strukturis en formato JSON kie ni havas identigilon, ĉenon kun la demando kaj r1, r2, kiuj reprezentas respondon 1 kaj respondon 2, fine ni havas, kiu el la respondoj estas ĝusta.

Ni vidu iom kiel funkcias U1db, la unua afero, kiun ni devas fari por uzi U1db, estas importi la modulon:

import U1db 1.0 as U1db

Ni deklaras la datumbazon:

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

La datumbazoj estos konservitaj kiel aU1DbDatabase.u1db, nun ni kreas dokumenton:

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

Kie ni povas vidi la formaton {«saluton»: «io»}, por plenumi demandojn, ĉu por aldoni datumojn, akiri datumojn, forigi ilin ktp. Ni havas la elementon U1db.Query.

Ni povas trovi lernilo en la disvolva retejo de ubuntu.

Ni iru al nia aplikaĵo kaj kreu nian datumbazon, kiel ni vidis, ke ni difinas la datumbazon:

U1db.Datumbazo {id: questionsdb; vojo: "questionsdb.u1db"}

Bone, nun ni metu iujn defaŭltajn elementojn en la datumbazajn dokumentajn demandojn db:

    U1db.Document {id: aDokumenta datumbazo: questionsdb docId: 'questions' create: true defaults: {"questions": [{"question": "Ĉu estos dev.fromlinux.net?", "R1": "jes" , "r2": "ne", "r3": "nazo", "r4": "falsa respondo", "ĝusta": "3"}, {"demando": "Kiu estas hagrid (harry potter)?" , "r1": "La vicdirektoro de la lernejo", "r2": "La gardisto", "r3": "La instruisto pri transformoj", "r4": "prefekto", "ĝusta": "2" }, {"question": "Kio estas la ĉefurbo de Islando?", "r1": "Amsterdamo", "r2": "Rejkjaviko", "r3": "Tbiliso", "r4": "Almato", " ĝusta ":" 2 "}]}}

Mi konscias, ke la kodo ne montriĝas kiel ĝi devus, sed se ni atente rigardos, ni vidos, ke ni havas elementon pridemandado, Kiu kun la »[]» ni specifas, ke povas esti pluraj (ili ne estas statikaj) elementoj; ĉi-kaze ni havos 4 defaŭlte, 4 demandojn kun iliaj respektivaj respondoj.

Por akiri la dokumentajn elementojn JSON, ni povas specifi la identigilon de la kreita dokumento (kiu estas Dokumento). Ni imagu, ke ni volas ricevi la tekston de la unua demando:

aDocument.contents.questions [0] .demando

Ĉi tiu kodlinio redonas la demandan enhavon de la dokumento aDokumento, elemento 0 (la unua en la indekso), kiu estas: "Ĉu estos dev.fromlinux.net?" Se ni indeksas la numeron 1, tiam ĝi iras al la dua demando.

Programante la ludan logikon

Nu, nun, kiam ni scias pritrakti iom de la datumbazo, kie ni konservis la demandojn, ni programos la logikon de la ludo. Unue ni kreos dosieron JavaScript (.js): Aldonu novan -> Qt -> Js-dosieron. Mi vokos lin logiko.js.

En la dosiero ni kreos plurajn funkciojn, por importi la js-dosieron en nian qml-dokumenton:

importi "logica.js" kiel Logica

Ni asocias ĝin kun la nomo Logica, tial kiam ni volas nomi funkcion, ni faros ĝin kiel Logica.funcion (), kvazaŭ ĝi estus objekto, kiu havas siajn metodojn.

Nuntempe, por ke la afiŝo ne fariĝu tro longa, ni lasos la tempon de la demando kaj la eblojn por poste, ni koncentriĝos pri la demandoj kaj la punktoj, ni vidu funkcion, kiun ni uzos por pluiri de la demando:

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

Kiel ni povas vidi, ni preterpasas la demandan numeron kie ni estas kiel argumento kaj de ĉi tie ĝi metas la respondojn al la butonoj kaj la demandetikedo. Ni vidu nun por validigi ĉu la elektita respondo estas ĝusta:

funkcio hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (opcio == ĝusta_num) hit = vera; reveno trafita; }

La kodo parolas mem, se la elektita opcio estas la sama kiel tiu donita de la datumbazo, tiam ĝi estos vera, alie ĝi ne faros. Nun, kiam ni difinas ĉi tiujn funkciojn, ni aplikos ilin en nia qml-kodo.

Unue ni aldonos variablon, kiu regos, en kiu demando ni estas, ni nomos ĝin num; Ni ankaŭ havos tri pliajn variablojn: trafoj, maltrafoj kaj punktoj.

    posedaĵo int num: 0 posedaĵo int nfaults: 0 posedaĵo int naskiĝoj: 0 posedaĵo int npunktoj: 0

Komence ili ĉiuj estas 0.

Nun ni aldonas onClick al ĉiuj respondaj butonoj. onClick, kiel ĝia nomo diras, estas evento, kiu okazos kiam oni klakas tiun butonon:

            Butono {id: resp1 teksto: "Respondo 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npunktoj = npunktoj + 50 naskiĝoj = naskiĝoj + 1} else {nfaults = nfaults + 1}}}

Ni vidas, ke kiam vi alklakas la butonon, ĝi kontrolas ĉu ĝi estas ĝusta aŭ ne, se ĝi estas, aldonu la punktojn kaj pasigu la demandon, alie restas unu vivo.

Fine ni ŝarĝos la unuan demandon kiam la paĝa komponanto ŝarĝos:

    Paĝo {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Ni vidu kiel rezultis:

testo


La enhavo de la artikolo aliĝas al niaj principoj de redakcia etiko. Por raporti eraron alklaku Ĉi tie.

2 komentoj, lasu la viajn

Lasu vian komenton

Via retpoŝta adreso ne estos eldonita. Postulita kampojn estas markita per *

*

*

  1. Respondeculo pri la datumoj: Miguel Ángel Gatón
  2. Celo de la datumoj: Kontrola SPAM, administrado de komentoj.
  3. Legitimado: Via konsento
  4. Komunikado de la datumoj: La datumoj ne estos komunikitaj al triaj krom per laŭleĝa devo.
  5. Stokado de datumoj: Datumbazo gastigita de Occentus Networks (EU)
  6. Rajtoj: Iam ajn vi povas limigi, retrovi kaj forigi viajn informojn.

  1.   Gabelus diris

    Mi sekvas la paŝojn kaj ĉio funkcias. Nur por kunlabori mi diras tion:
    * Ne ŝanĝas la valoron de trafoj kaj maltrafoj. Vi devas aldoni tion al ĉiu butono en via klaka evento.
    * Kaj tio en la linio:
    if (Logic.acerto (num, 1)) {
    ŝanĝu la 1 al la numero de la butono / respondo.

    lolbimbo, mi trovas vian kontribuon interesa. Mi esperas novajn tutojn !!!

    Dankon pro dividado.

    1.    lolbimbo diris

      Mi ŝatas, ke vi komentis ĉi tiujn punktojn, ĉar mi ne klarigis tion en la afiŝo, kio estas pli, mi ne memoras la punktojn, la sukcesojn kaj malsukcesojn, se vi rigardos ĝin, vi vidos tion, kiam ni alklakos la butonon, ni aldonas la poentojn la sukcesoj ... sed ili ne estas reflektitaj en la Etikedo, tial ni devas meti ĝin en ĝian tekstan posedaĵon por montri la punktojn:

      Etikedo {
      id: malsukcesoj
      teksto: «Kulpoj:» + nfaults
      koloro: "ruĝa"
      }

      Etikedo {
      identigilo: sukcesoj
      teksto: «Trafoj:» + naskita
      }

      Etikedo {
      identigilo: punktoj
      teksto: «Punktoj:» + npunktoj
      tiparo: "meza"
      }

      Mi ankaŭ klarigos ĝin en la 3a parto.