Lietotnes izveide Ubuntu Touch [QML] - [2. daļa]

Ievads:

Nu, šeit mums ir ziņa, kas seko DaļaŠajā mēs pievērsīsimies datu (jautājumu) apstrādei, un mēs sāksim ar spēles loģisko daļu, nākamajā mēs pabeigsim loģiku un īstenosim laiku un 3 iespējas.

Kodu varat atrast manā Launchpad repozitorijā (noklikšķiniet šeit), kur es to atjaunināšu, kad eju.

Datu bāze:

Datu bāzei mēs izmantosim u1db, kas ir datu bāze, kas datus saglabā formātā JSON.

Vispirms redzēsim, kādi dati mums būtu jāsaglabā, mums ir 1 jautājums (bez jautājuma teksta būtu jauki, ja būtu identifikators), ar 4 iespējamām atbildēm, no kurām tikai 1 var būt, tāpēc dokuments JSON vienam jautājumam jābūt:

{ "id": 1, "question": " būs dev.desdelinux.net ", "atbildes" : { r1: "jā", r2: "nē", r3: "nezinu", r4: "šī ir nepatiesa atbilde" }, "pareizi": 3 }

Kā redzam, mēs esam strukturēti formātā JSON kur mums ir identifikators, virkne ar jautājumu un r1, r2, kas apzīmē 1. un 2. atbildi, visbeidzot, mums ir kāda no atbildēm ir pareiza.

Apskatīsim nedaudz, kā darbojas U1db, pirmā lieta, kas mums jādara, lai izmantotu U1db, ir moduļa importēšana:

import U1db 1.0 as U1db

Mēs deklarējam datu bāzi:

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

Datu bāzes tiks saglabātas kā aU1DbDatabase.u1db, tagad mēs izveidojam dokumentu:

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

Kur mēs varam redzēt formātu {«labdien»: «kaut kas»}, lai izpildītu vaicājumus, vai nu lai pievienotu datus, iegūtu datus, tos izdzēstu utt. Mums ir elements U1db.Query.

Mēs varam atrast a konsultācija attīstības tīmekļa vietnē Ubuntu.

Dodamies uz mūsu lietojumprogrammu un izveidojam savu datu bāzi, kā redzējām, mēs definējam datu bāzi:

U1db.Database {id: db jautājumi; ceļš: "questionsdb.u1db"}

Labi, tagad ievietosim dažus noklusējuma elementus datu bāzes dokumenta jautājumosdb:

    U1db.Document { id: aDokumentu datu bāze: questionsdb docId: 'jautājumi' izveidot: patiesie noklusējuma iestatījumi: { "jautājumi": [ {"jautājums":"Būs dev.desdelinux.net ?", "r1":"jā", "r2":"nē", "r3":"deguns", "r4":"nepatiesa atbilde", "pareiza": "3" }, {"jautājums ":"Kas ir Hagrids (Harijs Poters)?", "r1":"Skolas direktora vietnieks", "r2":"Spēļu sargs", "r3":"Pārveidošanas skolotājs", "r4":" Prefekts", "pareizs": "2"}, {"jautājums":"Kas ir Islandes galvaspilsēta?", "r1":"Amsterdama", "r2":"Reikjavīka", "r3":" Tbilisi ", "r4":"Almati", "pareizi": "2"} ] } }

Es apzinos, ka kods netiek parādīts tā, kā vajadzētu, bet, ja paskatīsimies, redzēsim, ka mums ir elements jautājumiem, kuru ar »[]» mēs precizējam, ka var būt vairāki (tie nav statiski) elementi; šajā gadījumā mums pēc noklusējuma būs 4 jautājumi, 4 jautājumi ar attiecīgajām atbildēm.

Lai iegūtu dokumenta elementus JSON, mēs varam norādīt mūsu izveidotā dokumenta identifikatoru (kas ir aDokuments). Iedomāsimies, ka mēs vēlamies iegūt pirmā jautājuma tekstu:

aDocument.contents.questions [0] .question

Šī koda rindiņa atgriež mums 0. elementa (pirmā indeksā) dokumenta aDocument jautājuma saturu, kas ir: «Būs dev.desdelinux.tīkls?" Ja indeksā ieliekam skaitli 1, tad tas ir otrais jautājums.

Spēles loģikas programmēšana

Nu, tagad, kad mēs zinām, kā rīkoties ar datu bāzi, kurā mums ir mazliet saglabāti jautājumi, mēs ieprogrammēsim spēles loģiku. Vispirms mēs izveidosim failu JavaScript (.js): pievienojiet jaunu -> Qt -> Js failu. Es viņam piezvanīšu logic.js.

Failā mēs izveidosim vairākas funkcijas, lai importētu js failu mūsu qml dokumentā:

importēt "logica.js" kā Logica

Mēs to saistām ar nosaukumu Logica, tāpēc, kad mēs vēlamies izsaukt funkciju, mēs to darīsim kā Logica.funcion (), it kā tas būtu objekts, kuram ir savas metodes.

Pagaidām, lai amats nekļūtu pārāk garš, jautājuma laiku un iespējas atstāsim vēlākam laikam, koncentrēsimies uz jautājumiem un punktiem, redzēsim funkciju, kuru izmantosim, lai pārietu no jautājums:

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

Kā redzam, jautājuma numuru, kur atrodamies, mēs nododam kā argumentu, un no šejienes tas liek atbildes uz pogām un jautājuma etiķeti. Apskatīsim, lai pārbaudītu, vai atlasītā atbilde ir pareiza:

funkcija hit (num, opcija) {var hit = false; var num_correct = aDocument.contents.questions [num]. pareizs; ja (opcija == pareizs_skaitlis) hit = patiess; atgriešanās trāpījums; }

Kods runā pats par sevi, ja izvēlētā opcija ir tāda pati kā datu bāzes sniegtā, tad tā būs taisnība, pretējā gadījumā tā nebūs. Tagad, kad mums ir definētas šīs funkcijas, mēs tās pielietosim mūsu qml kodā.

Vispirms mēs pievienosim mainīgo, kas kontrolēs, kurā jautājumā mēs esam, mēs to nosauksim par num; Mums būs arī vēl trīs mainīgie: sitieni, neizmantotie un punkti.

    Īpašuma int num .: 0 Īpašuma int kļūdas: 0 Īpašuma int dzimšanas: 0 Īpašuma int punktu: 0

Sākotnēji tie visi ir 0.

Tagad mēs visām atbildēšanas pogām pievienojam onClick. onClick, kā saka tās nosaukums, ir notikums, kas notiks, noklikšķinot uz šīs pogas:

            Poga {id: resp1 text: "Response 1" enkuri.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 dzimšanas = dzimšanas + 1} else {nfaults = nfaults + 1}}}

Mēs redzam, ka, noklikšķinot uz pogas, tā pārbauda, ​​vai tā ir pareiza vai nē, ja tā ir, pievienojiet punktus un nododiet jautājumu, pretējā gadījumā paliek viena dzīve.

Visbeidzot, mēs ielādēsim pirmo jautājumu, kad tiek ielādēta lapas sastāvdaļa:

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

Apskatīsim, kā tas izrādījās:

pārbaude


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   gabielus teica

    Es sekoju soļiem, un viss darbojas. Lai sadarbotos, es saku:
    * Nemaina trāpījumu un neizmantoto vērtību. Tas jums jāpievieno katrai klikšķa pogas pogai.
    * Un tas rindā:
    ja (Logic.acerto (num, 1)) {
    nomainiet 1 uz pogas / atbildes numuru.

    lolbimbo, es uzskatu, ka tavs ieguldījums ir interesants. Es ceru, ka jauni tutos !!!

    Paldies par dalīšanos.

    1.    lolbimbo teica

      Man patīk, ka jūs komentējāt šos punktus, jo es ierakstā to skaidri nepateicu, vēl vairāk, es neatceros punktus, panākumus un neveiksmes, ja paskatās, jūs redzēsiet, ka tad, kad mēs nospiedīsim pogu mēs pievienojam panākumu punktus ... bet tie nav atspoguļoti etiķetē, tāpēc mums tas ir jāievieto tā teksta īpašumā, lai parādītu punktus:

      Iezīme {
      id: neveiksmes
      teksts: «Kļūdas:» + n kļūmes
      krāsa: "sarkana"
      }

      Iezīme {
      id: hits
      teksts: «hits:» + dzimis
      }

      Iezīme {
      id: punkti
      teksts: «Punkti:» + n punkti
      fontSize: "vidējs"
      }

      Es to arī precizēšu 3. daļā.