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.
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.
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:
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.
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.