Lumilikha ng isang app para sa Ubuntu Touch [QML] - [Bahagi 2]

Panimula:

Ngayon narito ang post na sumusunod sa unang bahagiSa isang ito ay magtutuon kami sa paghawak ng data (mga katanungan), at magsisimula kami sa bahagi ng lohika ng laro, sa susunod na tatapusin namin ang lohika at ipatupad ang oras at ang 3 mga pagpipilian.

Mahahanap mo ang code sa aking Launchpad repository (mag-click dito), kung saan ia-update ko ito sa aking pagpunta.

Database:

Para sa database na gagamitin namin u1db, na isang database na nakakatipid ng data sa format JSON.

Una sa lahat tingnan natin kung anong data ang dapat nating i-save, mayroon kaming 1 tanong (bukod sa teksto ng tanong na masarap na magkaroon ng isang identifier), na may 4 na posibleng mga sagot, kung saan 1 lamang ang maaaring maging, samakatuwid ang dokumento sa JSON solong tanong ay dapat na:

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

Tulad ng nakikita natin na nakabalangkas sa format JSON kung saan mayroon kaming isang pagkakakilanlan, isang string na may tanong at r1, r2 na kumakatawan sa sagot 1 at sagot 2, sa wakas mayroon kaming alin sa mga sagot na tama.

Tingnan natin nang kaunti kung paano gumagana ang U1db, ang unang bagay na kailangan nating gawin upang magamit ang U1db ay ang pag-import ng module:

import U1db 1.0 as U1db

Ipinahayag namin ang database:

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

Ang mga database ay nai-save bilang aU1DbDatabase.u1db, ngayon lumikha kami ng isang dokumento:

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

Kung saan makikita natin ang format na {«hello»: «isang bagay»}, upang magpatupad ng mga query, alinman upang magdagdag ng data, makakuha ng data, tanggalin ang mga ito atbp. Mayroon kaming elemento ng U1db.Query.

Mahahanap natin ang a sangguni sa website ng pag-unlad ng Ubuntu.

Pumunta tayo sa aming application at likhain ang aming database, tulad ng nakita naming tinukoy namin ang database:

U1db.Database {id: db mga katanungan; landas: "questionsdb.u1db"}

Okay, ngayon maglagay tayo ng ilang mga default na elemento sa database ng dokumento na katanungandb:

    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"}
                    ] }
    }

Alam ko na ang code ay hindi ipinakita tulad ng nararapat, ngunit kung titingnan nating mabuti makikita natin na mayroon kaming elemento pagtatanong, na sa »[]» tinukoy namin na maaaring maraming (hindi sila static) na mga elemento; sa kasong ito magkakaroon kami ng 4 bilang default, 4 na katanungan sa kani-kanilang mga sagot.

Upang makuha ang mga elemento ng dokumento JSON, maaari naming tukuyin ang tagatukoy ng dokumento na nilikha namin (na kung saan ay isang dokumento). Isipin natin na nais nating makuha ang teksto ng unang tanong:

aDocument.contents.questions [0] .tanong

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.

Pagprograma ng lohika ng laro

Sa ngayon, alam na namin kung paano hawakan ang isang maliit na database kung saan nai-save namin ang mga katanungan, ipaprograma namin ang lohika ng laro. Una sa lahat lilikha kami ng isang file JavaScript (.js): Magdagdag ng bago -> Qt -> Js File. tatawagan ko siya lohika.js.

Sa file ay lilikha kami ng maraming mga pag-andar, upang mai-import ang js file sa aming qml na dokumento:

i-import ang "logica.js" bilang Logica

Inuugnay namin ang pangalang Logica, samakatuwid kung nais naming tumawag sa isang pagpapaandar ay gagawin namin ito bilang Logica.function (), na para bang isang bagay na mayroong mga pamamaraan nito.

Sa ngayon, upang ang post ay hindi maging masyadong mahaba, iniiwan namin ang oras ng tanong at ang mga pagpipilian para sa paglaon, magtutuon kami sa mga katanungan at mga punto, tingnan natin ang isang pagpapaandar na gagamitin natin upang magpatuloy mula sa tanong:

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

Tulad ng nakikita natin, ipinapasa namin ang numero ng tanong kung nasaan kami bilang isang pagtatalo at mula rito inilalagay nito ang mga sagot sa mga pindutan at tatak ng tanong. Tingnan natin ngayon upang mapatunayan kung ang napiling sagot ay tama:

pagpapaandar sa pag-andar (num, pagpipilian) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; kung (opsyon == tama_num) pindutin = totoo; bumalik hit; }

Nagsasalita ang code para sa sarili, kung sakaling ang napiling pagpipilian ay pareho sa ibinigay ng database, kung gayon ito ay magiging totoo, kung hindi man ay hindi. Ngayon na natukoy namin ang mga pagpapaandar na ito, ilalapat namin ang mga ito sa aming qml code.

Una sa lahat ay magdaragdag kami ng isang variable na makokontrol kung anong tanong tayo, tatawagin namin itong num; Magkakaroon din kami ng tatlong iba pang mga variable: hit, misses at point.

    pag-aari int num: 0 pag-aari int nfaults: 0 pag-aari int mga kapanganakan: 0 pag-aari int Pusint: 0

Sa una lahat sila ay nasa 0.

Ngayon nagdagdag kami ng isang onClick sa lahat ng mga pindutan ng sagot. Ang onClick, tulad ng sinasabi ng pangalan nito, ay isang kaganapan na magaganap kapag na-click ang pindutan:

            Button {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.ciguro (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 births = births + 1} iba pa {nfaults = nfaults + 1}}}

Nakita namin na sa pamamagitan ng pag-click sa pindutan, sinusuri nito kung ito ay tama o hindi, kung sakaling tama ito, idagdag ang mga puntos at ipasa ang tanong, kung hindi man mananatili ang isang buhay.

Panghuli gagawin namin ang unang pag-load ng tanong kapag naglo-load ang bahagi ng Pahina:

    Pahina {id: pageGame Component.onKumpleto: {Logic.nextPregunta (0)}

Tingnan natin kung paano ito naganap:

pagsusulit


Iwanan ang iyong puna

Ang iyong email address ay hindi nai-publish. Mga kinakailangang patlang ay minarkahan ng *

*

*

  1. Responsable para sa data: Miguel Ángel Gatón
  2. Layunin ng data: Kontrolin ang SPAM, pamamahala ng komento.
  3. Legitimation: Ang iyong pahintulot
  4. Komunikasyon ng data: Ang data ay hindi maiparating sa mga third party maliban sa ligal na obligasyon.
  5. Imbakan ng data: Ang database na naka-host ng Occentus Networks (EU)
  6. Mga Karapatan: Sa anumang oras maaari mong limitahan, mabawi at tanggalin ang iyong impormasyon.

  1.   gabielus dijo

    Sinusunod ko ang mga hakbang at gumagana ang lahat. Makipagtulungan lamang sinasabi ko na:
    * Hindi binabago ang halaga ng mga hit at miss. Kailangan mong idagdag iyon sa bawat pindutan sa iyong kaganapan sa pag-click.
    * At iyon sa linya:
    kung (Logic.acerto (num, 1)) {
    baguhin ang 1 sa bilang ng pindutan / sagot.

    lolbimbo, nakikita kong nakakainteres ang iyong kontribusyon. Sana mga bagong tuto !!!

    Salamat sa pagbabahagi.

    1.    lolbimbo dijo

      Gusto ko na nagkomento ka sa mga puntong ito dahil hindi ko ito malinaw sa post, kung ano pa, hindi ko naalala ang mga punto, ang mga tagumpay at pagkabigo, kung titingnan mo ito makikita mo na kapag na-click namin ang pindutan, idinagdag namin ang mga puntos na mga tagumpay. ngunit ang mga ito ay hindi nakalarawan sa Label, iyon ang dahilan kung bakit kailangan nating ilagay ito sa katangian ng teksto na nagpapakita ng mga puntos:

      Lagyan ng label {
      id: pagkabigo
      teksto: «Mga pagkakamali:» + mga pagkakamali
      Kulay pula"
      }

      Lagyan ng label {
      id: hits
      teksto: «Hits:» + ipinanganak
      }

      Lagyan ng label {
      id: puntos
      teksto: «Mga Punto:» + Mga Copyright
      fontSize: "medium"
      }

      Lilinawin ko din ito sa bahagi 3.