Programos, skirtos „Ubuntu Touch“, kūrimas [QML] - [2 dalis]

Įvadas:

Na čia mes turime įrašą, kuris seka pirmoji dalisŠiame mes sutelksime dėmesį į duomenų (klausimų) tvarkymą ir pradėsime nuo loginės žaidimo dalies, kitoje baigsime logiką ir įgyvendinsime laiką bei 3 variantus.

Kodą galite rasti mano „Launchpad“ saugykloje (klinikinis akvariumas), kur aš jį atnaujinsiu.

Duomenų bazė:

Duomenų bazei mes naudosime u1db, kuri yra duomenų bazė, kuri išsaugo duomenis tokiu formatu JSON.

Pirmiausia pažiūrėkime, kokius duomenis turėtume išsaugoti, turime 1 klausimą (be klausimo teksto būtų malonu turėti identifikatorių), su 4 galimais atsakymais, iš kurių gali būti tik 1, todėl dokumentas JSON vienas klausimas turėtų būti:

{
"id": 1,
"pregunta": " habra dev.desdelinux.net ",
"respuestas" : { r1: "si" , r2: "no" , r3: "no se sabe" ,  r4: "esto es una respuesta falsa" },
"correcta": 3
}

Kaip matome, susisteminome formatą JSON kur mes turime identifikatorių, eilutę su klausimu ir r1, r2, kurie atspindi 1 ir 2 atsakymus, galiausiai turime teisingą atsakymą.

Pažiūrėkime šiek tiek, kaip veikia U1db, pirmas dalykas, kurį turime padaryti, kad galėtume naudoti U1db, yra importuoti modulį:

import U1db 1.0 as U1db

Deklaruojame duomenų bazę:

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

Duomenų bazės bus išsaugotos kaip aU1DbDatabase.u1db, dabar mes kuriame dokumentą:

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

Kur galime pamatyti formatą {«labas»: «kažkas»}, kad galėtume vykdyti užklausas, arba pridėti duomenų, gauti duomenis, juos ištrinti ir pan. Mes turime U1db.Query elementą.

Mes galime rasti a vadovėlis plėtros tinklalapyje ubuntu.

Eikime į savo programą ir sukurkime savo duomenų bazę, kaip matėme, mes apibrėžėme duomenų bazę:

U1db.Duomenų bazė {id: db klausimai; kelias: "questionsdb.u1db"}

Gerai, dabar įdėkime keletą numatytųjų elementų į duomenų bazės dokumento klausimusdb:

    U1db.Document {
        id: aDocument
        database: preguntasdb
        docId: 'preguntas'
        create: true
        defaults: { "preguntas":
                    [
                        {"pregunta":"Habra dev.desdelinux.net ?", 
                        "r1":"si", "r2":"no", "r3":"nose", 
                        "r4":"respuesta falsa", "correcta": "3" },
                        {"pregunta":"Quien es hagrid (harry potter) ?", 
                        "r1":"El vicedirector de la escuela", 
                        "r2":"El guardabosques", 
                        "r3":"El profesor de transformaciones", 
                        "r4":"Un prefecto", 
                        "correcta": "2"},
                        {"pregunta":"¿Cúal es la capital de Islandia?", 
                       "r1":"Amsterdam",
                       "r2":"Reykjavik", 
                       "r3":"Tiflis", 
                       "r4":"Almaty",
                       "correcta": "2"}
                    ] }
    }

Aš žinau, kad kodas rodomas ne taip, kaip turėtų, bet atidžiai pažiūrėję pamatysime, kad turime elementą apklausos, kuriuos su »[]» nurodome, kad elementų gali būti keli (jie nėra statiški); šiuo atveju pagal numatytuosius nustatymus turėsime 4 klausimus su atitinkamais atsakymais.

Norėdami gauti dokumento elementus JSON, mes galime nurodyti savo sukurto dokumento identifikatorių (kuris yra aDokumentas). Įsivaizduokime, kad norime gauti pirmojo klausimo tekstą:

aDocument.contents.questions [0] .question

Esta línea de código nos retorna el contenido de pregunta del documento aDocument, del elemento 0 (el primero del índice), que es: «Habra dev.desdelinux.net?». Si ponemos en el índice el número 1, entonces seáa la segunda pregunta.

Žaidimo logikos programavimas

Na, dabar, kai žinome, kaip tvarkyti šiek tiek duomenų bazės, kurioje išsaugojome klausimus, programuosime žaidimo logiką. Pirmiausia sukursime failą JavaScript (.js): pridėkite naują -> Qt -> Js failą. Aš jam paskambinsiu logic.js.

Faile ketiname sukurti kelias funkcijas, kad importuotume js failą į savo qml dokumentą:

importuoti „logica.js“ kaip „Logica“

Mes susiejame vardą „Logica“, todėl kai norime iškviesti funkciją, tai darysime kaip „Logica.funcion“ (), tarsi tai būtų objektas, turintis savo metodus.

Kol kas, kad įrašas netaptų per ilgas, klausimo laiką ir variantus paliksime vėlesniam laikui, susitelksime į klausimus ir klausimus, pažiūrėkime funkciją, kurią naudosime pereidami nuo klausimas:

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

Kaip matome, mes perduodame klausimo numerį, kuriame esame, kaip argumentą, ir iš čia jis pateikia atsakymus į mygtukus ir klausimo etiketę. Pažiūrėkime dabar, kad patikrintume, ar pasirinktas atsakymas yra teisingas:

funkcijos įvykis (skaičius, parinktis) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (variantas == teisingas_skaita) hit = true; grįžimo smūgis; }

Kodas kalba pats už save, jei pasirinkta parinktis yra ta pati, kurią pateikia duomenų bazė, tai bus teisinga, kitaip ne. Dabar, kai turime šias funkcijas, mes jas pritaikysime savo qml kode.

Pirmiausia pridėsime kintamąjį, kuris valdys, kuriame klausime esame, vadinsime numeriu; Taip pat turėsime dar tris kintamuosius: pataikymai, nepataikymai ir taškai.

    nuosavybės int skaičius: 0 nuosavybės int klaidų: 0 nuosavybės int gimimų: 0 nuosavybės int taškų: 0

Iš pradžių jie visi yra 0.

Dabar prie visų atsakymo mygtukų pridedame „onClick“. „onClick“, kaip sakoma jo pavadinime, yra įvykis, kuris įvyks spustelėjus tą mygtuką:

            Mygtukas {id: resp1 text: "Response 1" inkarai.horizontalCenter: parent.horizontalCenter plotis: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (skaičius) npoints = npoints + 50 gimimų = gimdymai + 1} else {nfaults = nfaults + 1}}}

Matome, kad spustelėjus mygtuką jis patikrina, ar jis teisingas, ar ne, jei taip, pridėkite taškus ir perduokite klausimą, kitaip lieka vienas gyvenimas.

Galiausiai atliksime pirmąjį klausimą, kai įkelsite puslapio komponentą:

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

Pažiūrėkime, kaip pasirodė:

testas


Palikite komentarą

Jūsų elektroninio pašto adresas nebus skelbiamas. Privalomi laukai yra pažymėti *

*

*

  1. Atsakingas už duomenis: Miguel Ángel Gatón
  2. Duomenų paskirtis: kontroliuoti šlamštą, komentarų valdymą.
  3. Įteisinimas: jūsų sutikimas
  4. Duomenų perdavimas: Duomenys nebus perduoti trečiosioms šalims, išskyrus teisinius įsipareigojimus.
  5. Duomenų saugojimas: „Occentus Networks“ (ES) talpinama duomenų bazė
  6. Teisės: bet kuriuo metu galite apriboti, atkurti ir ištrinti savo informaciją.

  1.   gabielius sakė

    Aš seku žingsnius ir viskas veikia. Norėdamas bendradarbiauti, sakau:
    * Nekeičia pataikymų ir nepataikymų vertės. Turite tai pridėti prie kiekvieno savo paspaudimo įvykio mygtuko.
    * Ir tai eilutėje:
    jei (Logic.acerto (skaičius, 1)) {
    1 pakeiskite mygtuko / atsakymo numeriu.

    lolbimbo, manau, kad tavo indėlis įdomus. Tikiuosi nauji tutai !!!

    Ačiū už dalinimąsi.

    1.    lolbimbo sakė

      Man patinka, kad jūs pakomentavote šiuos dalykus, nes įraše nepaaiškinau, kas be ko, nepamenu taškų, sėkmių ir nesėkmių, jei pažvelgsite į tai, pamatysite, kad paspaudę mygtuką pridėsime taškus, kai pasisekė ... bet jie neatsispindi etiketėje, todėl mes turime jį įdėti į savo teksto ypatybę, kad parodytume taškus:

      Etiketė {
      id: nesėkmės
      tekstas: «Gedimai:» + n defektai
      spalva: "raudona"
      }

      Etiketė {
      id: hitai
      tekstas: «Hits:» + gimęs
      }

      Etiketė {
      id: taškai
      tekstas: «Taškai:» + n taškai
      fontSize: "medium"
      }

      Aš taip pat paaiškinsiu 3 dalyje.