Sovelluksen luominen Ubuntu Touchille [QML] - [Osa 2]

introducción:

No, tässä meillä on viesti, joka seuraa ensimmäinen osaTässä keskitymme tietojen (kysymysten) käsittelyyn ja aloitamme pelin logiikkaosasta, seuraavassa lopetamme logiikan ja toteutamme ajan ja 3 vaihtoehtoa.

Löydät koodin Launchpad-arkistostani (klikkaa tästä), missä päivitän sen mennessäni.

Tietokanta:

Käytämme tietokantaa varten U1 db, joka on tietokanta, joka tallentaa tiedot muodossa JSON.

Ensinnäkin katsotaan, mitä tietoja meidän tulisi tallentaa, meillä on 1 kysymys (kysymyksen tekstin lisäksi olisi mukavaa saada tunniste), jossa on 4 mahdollista vastausta, joista vain yksi voi olla, joten asiakirja JSON yhden kysymyksen tulisi olla:

{ "id": 1, "question": " siellä tulee olemaan kehittäjä.desdelinux.net ", "vastauksia" : { r1: "kyllä", r2: "ei", r3: "en tiedä", r4: "tämä on väärä vastaus" }, "oikein": 3 }

Kuten näemme, olemme rakentaneet muodon JSON missä meillä on tunniste, merkkijono kysymyksellä ja r1, r2, jotka edustavat vastausta 1 ja vastaus 2, lopuksi meillä on mikä vastauksista on oikea.

Katsotaanpa vähän, kuinka U1db toimii, ensimmäinen asia, joka meidän on tehtävä U1db: n käyttämiseksi, on tuoda moduuli:

import U1db 1.0 as U1db

Ilmoitamme tietokannan:

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

Tietokannat tallennetaan nimellä aU1DbDatabase.u1db, nyt luomme asiakirjan:

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

Missä voimme nähdä muodon {«hei»: «jotain»} kyselyjen suorittamiseksi joko tietojen lisäämiseksi, tietojen hankkimiseksi, poistamiseksi jne. Meillä on U1db.Query-elementti.

Voimme löytää a oppitunti kehityskeskuksessa Ubuntu.

Mennään sovelluksellemme ja luodaan tietokanta, kuten olemme nähneet, määritämme tietokannan:

U1db.Database {id: db kysymykset; polku: "questionsdb.u1db"}

Okei, nyt laitetaan joitain oletuselementtejä tietokantadokumentin kysymyksiindb:

    U1db.Document { id: aDocument tietokanta: questiondb docId: 'kysymykset' create: true defaults: { "questions": [ {"question":"Tulee kehittäjä.desdelinux.net ?", "r1":"kyllä", "r2":"ei", "r3":"nenä", "r4":"väärä vastaus", "oikea": "3" }, {"kysymys" ":"Kuka on Hagrid (Harry Potter)?", "r1":"Koulun vararehtori", "r2":"Riistanpitäjä", "r3":"Muunnanopettaja", "r4":" Prefekti", "oikea": "2"}, {"question":"Mikä on Islannin pääkaupunki?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "oikea": "2"} ] } }

Tiedän, että koodi ei näy niin kuin sen pitäisi, mutta jos katsomme tarkkaan, näemme, että meillä on elementti preguntas, jotka »[]»: llä tarkennamme, että elementtejä voi olla useita (ne eivät ole staattisia); tässä tapauksessa meillä on oletusarvoisesti 4 kysymystä vastauksineen.

Hanki dokumenttielementit JSON, voimme määrittää luomamme asiakirjan tunnisteen (joka on dokumentti). Kuvitellaan, että haluamme saada ensimmäisen kysymyksen tekstin:

aDocument.contents.questions [0] .question

Tämä koodirivi palauttaa meille elementin 0 (indeksin ensimmäinen) dokumentin aDocument kysymyssisällön, joka on: «Tulee dev.desdelinux.netto?" Jos laitamme indeksiin numeron 1, se on toinen kysymys.

Pelilogiikan ohjelmointi

No, nyt kun tiedämme kuinka käsitellä vähän tietokantaa, johon olemme tallentaneet kysymykset, aiomme ohjelmoida pelin logiikan. Ensinnäkin luomme tiedoston JavaScript (.js): Lisää uusi -> Qt -> Js-tiedosto. soitan hänelle logic.js.

Tiedostossa aiomme luoda useita toimintoja tuoda js-tiedosto qml-dokumenttiin:

tuo "logica.js" nimellä Logica

Yhdistämme nimen Logica, joten kun haluamme kutsua funktion, teemme sen nimellä Logica.function (), ikään kuin se olisi objekti, jolla on menetelmänsä.

Toistaiseksi, jotta viesti ei tule liian pitkäksi, jätämme kysymyksen ajankohdan ja vaihtoehdot myöhemmäksi, keskitymme kysymyksiin ja kohtiin, katsotaan funktio, jota käytämme siirtymään kysymys:

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

Kuten näemme, välitämme kysymyksen numeron, jossa olemme, argumenttina ja täältä se asettaa vastaukset painikkeisiin ja kysymystarraan. Katsotaan nyt tarkistaa, onko valittu vastaus oikea:

function hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; jos (vaihtoehto == oikea_numero) osuma = tosi; paluu osuma; }

Koodi puhuu puolestaan, jos valittu vaihtoehto on sama kuin tietokannan tarjoama, se on totta, muuten ei. Nyt kun nämä toiminnot on määritelty, käytämme niitä qml-koodissamme.

Ensinnäkin lisätään muuttuja, joka hallitsee mitä kysymystä olemme, kutsumme sitä num; Meillä on myös kolme muuttujaa lisää: osumat, epäonnistumiset ja pisteet.

    omaisuuden int numero: 0 omaisuuden int viat: 0 omaisuuden int syntymät: 0 omaisuuden int pisteet: 0

Aluksi ne kaikki ovat nollalla.

Nyt lisätään onClick kaikkiin vastauspainikkeisiin. onClick, kuten sen nimi kertoo, on tapahtuma, joka tapahtuu, kun kyseistä painiketta napsautetaan:

            Button {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 syntymää = syntymät + 1} else {nfaults = nfaults + 1}}}

Näemme, että kun napsautat painiketta, se tarkistaa, onko se oikea vai ei, jos se on, lisää pisteet ja välitä kysymys, muuten yksi elämä jää jäljelle.

Lopuksi teemme ensimmäisen kysymyksen latauksen, kun sivuosa latautuu:

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

Katsotaanpa, miten se osoittautui:

testi


Jätä kommentti

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *

*

*

  1. Vastuussa tiedoista: Miguel Ángel Gatón
  2. Tietojen tarkoitus: Roskapostin hallinta, kommenttien hallinta.
  3. Laillistaminen: Suostumuksesi
  4. Tietojen välittäminen: Tietoja ei luovuteta kolmansille osapuolille muutoin kuin lain nojalla.
  5. Tietojen varastointi: Occentus Networks (EU) isännöi tietokantaa
  6. Oikeudet: Voit milloin tahansa rajoittaa, palauttaa ja poistaa tietojasi.

  1.   gabielus dijo

    Seuraan ohjeita ja kaikki toimii. Vain yhteistyön vuoksi sanon:
    * Ei muuta osumien ja epäonnistumisten arvoa. Sinun on lisättävä se jokaiseen napsautustapahtuman painikkeeseen.
    * Ja se rivillä:
    if (Logiikka.acerto (numero, 1)) {
    Sinun on vaihdettava 1 painikkeen / vastauksen numeroksi.

    lolbimbo, mielestäni panoksesi on mielenkiintoinen. Toivon uusia tutoja !!!

    Kiitos jakamisesta.

    1.    lolbimbo dijo

      Pidän siitä, että olette kommentoinut näitä seikkoja, koska en tehnyt siitä selvää viestissä, mitä enemmän, en muista kohtia, onnistumisia ja epäonnistumisia. Jos katsotte sitä, näet, että kun napsautamme painiketta, lisäämme onnistuneiden pisteet ... mutta ne eivät näy tarrassa, siksi meidän on lisättävä se sen tekstiominaisuuteen osoittamaan pisteet:

      Tunniste {
      id: epäonnistumiset
      teksti: «Viat:» + nviat
      väri punainen"
      }

      Tunniste {
      id: osumia
      teksti: «Osumat:» + syntynyt
      }

      Tunniste {
      id: pisteet
      teksti: «Pisteet:» + n pistettä
      fontSize: "medium"
      }

      Selvitän sitä myös osassa 3.