Enkonduko:
Nu jen ni havas la afiŝon kiu sekvas la unua partoEn ĉi tiu ni celos pritrakti la datumojn (demandoj), kaj ni komencos per la logika parto de la ludo, en la sekva ni finos la logikon kaj efektivigos la tempon kaj la 3 eblojn.
Datumbazo:
Por la datumbazo ni uzos u1db, kiu estas datumbazo, kiu konservas la datumojn en la formato JSON.
Unue ni vidu, kiajn datumojn ni konservu, ni havas 1 demandon (krom la teksto de la demando estus bone havi identigilon), kun 4 eblaj respondoj, el kiuj nur 1 povas esti, do la dokumento en JSON sola demando estu:
{"id": 1, "question": "estos dev.fromlinux.net", "respondoj": {r1: "jes", r2: "ne", r3: "ĝi ne estas konata", r4: "ĉi tio estas falsa respondo "}," ĝusta ": 3}
Kiel ni vidas, ni strukturis en formato JSON kie ni havas identigilon, ĉenon kun la demando kaj r1, r2, kiuj reprezentas respondon 1 kaj respondon 2, fine ni havas, kiu el la respondoj estas ĝusta.
Ni vidu iom kiel funkcias U1db, la unua afero, kiun ni devas fari por uzi U1db, estas importi la modulon:
import U1db 1.0 as U1db
Ni deklaras la datumbazon:
U1db.Database {
id: aDatabase
path: "aU1DbDatabase"
}
La datumbazoj estos konservitaj kiel aU1DbDatabase.u1db, nun ni kreas dokumenton:
U1db.Document {
id: aDocument
database: aDatabase
docId: 'helloworld'
create: true
defaults: { "hello": "Hello World!" }
}
Kie ni povas vidi la formaton {«saluton»: «io»}, por plenumi demandojn, ĉu por aldoni datumojn, akiri datumojn, forigi ilin ktp. Ni havas la elementon U1db.Query.
Ni iru al nia aplikaĵo kaj kreu nian datumbazon, kiel ni vidis, ke ni difinas la datumbazon:
U1db.Datumbazo {id: questionsdb; vojo: "questionsdb.u1db"}
Bone, nun ni metu iujn defaŭltajn elementojn en la datumbazajn dokumentajn demandojn db:
U1db.Document {id: aDokumenta datumbazo: questionsdb docId: 'questions' create: true defaults: {"questions": [{"question": "Ĉu estos dev.fromlinux.net?", "R1": "jes" , "r2": "ne", "r3": "nazo", "r4": "falsa respondo", "ĝusta": "3"}, {"demando": "Kiu estas hagrid (harry potter)?" , "r1": "La vicdirektoro de la lernejo", "r2": "La gardisto", "r3": "La instruisto pri transformoj", "r4": "prefekto", "ĝusta": "2" }, {"question": "Kio estas la ĉefurbo de Islando?", "r1": "Amsterdamo", "r2": "Rejkjaviko", "r3": "Tbiliso", "r4": "Almato", " ĝusta ":" 2 "}]}}
Mi konscias, ke la kodo ne montriĝas kiel ĝi devus, sed se ni atente rigardos, ni vidos, ke ni havas elementon pridemandado, Kiu kun la »[]» ni specifas, ke povas esti pluraj (ili ne estas statikaj) elementoj; ĉi-kaze ni havos 4 defaŭlte, 4 demandojn kun iliaj respektivaj respondoj.
Por akiri la dokumentajn elementojn JSON, ni povas specifi la identigilon de la kreita dokumento (kiu estas Dokumento). Ni imagu, ke ni volas ricevi la tekston de la unua demando:
aDocument.contents.questions [0] .demando
Ĉi tiu kodlinio redonas la demandan enhavon de la dokumento aDokumento, elemento 0 (la unua en la indekso), kiu estas: "Ĉu estos dev.fromlinux.net?" Se ni indeksas la numeron 1, tiam ĝi iras al la dua demando.
Programante la ludan logikon
Nu, nun, kiam ni scias pritrakti iom de la datumbazo, kie ni konservis la demandojn, ni programos la logikon de la ludo. Unue ni kreos dosieron JavaScript (.js): Aldonu novan -> Qt -> Js-dosieron. Mi vokos lin logiko.js.
En la dosiero ni kreos plurajn funkciojn, por importi la js-dosieron en nian qml-dokumenton:
importi "logica.js" kiel Logica
Ni asocias ĝin kun la nomo Logica, tial kiam ni volas nomi funkcion, ni faros ĝin kiel Logica.funcion (), kvazaŭ ĝi estus objekto, kiu havas siajn metodojn.
Nuntempe, por ke la afiŝo ne fariĝu tro longa, ni lasos la tempon de la demando kaj la eblojn por poste, ni koncentriĝos pri la demandoj kaj la punktoj, ni vidu funkcion, kiun ni uzos por pluiri de la demando:
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; }
Kiel ni povas vidi, ni preterpasas la demandan numeron kie ni estas kiel argumento kaj de ĉi tie ĝi metas la respondojn al la butonoj kaj la demandetikedo. Ni vidu nun por validigi ĉu la elektita respondo estas ĝusta:
funkcio hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (opcio == ĝusta_num) hit = vera; reveno trafita; }
La kodo parolas mem, se la elektita opcio estas la sama kiel tiu donita de la datumbazo, tiam ĝi estos vera, alie ĝi ne faros. Nun, kiam ni difinas ĉi tiujn funkciojn, ni aplikos ilin en nia qml-kodo.
Unue ni aldonos variablon, kiu regos, en kiu demando ni estas, ni nomos ĝin num; Ni ankaŭ havos tri pliajn variablojn: trafoj, maltrafoj kaj punktoj.
posedaĵo int num: 0 posedaĵo int nfaults: 0 posedaĵo int naskiĝoj: 0 posedaĵo int npunktoj: 0
Komence ili ĉiuj estas 0.
Nun ni aldonas onClick al ĉiuj respondaj butonoj. onClick, kiel ĝia nomo diras, estas evento, kiu okazos kiam oni klakas tiun butonon:
Butono {id: resp1 teksto: "Respondo 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npunktoj = npunktoj + 50 naskiĝoj = naskiĝoj + 1} else {nfaults = nfaults + 1}}}
Ni vidas, ke kiam vi alklakas la butonon, ĝi kontrolas ĉu ĝi estas ĝusta aŭ ne, se ĝi estas, aldonu la punktojn kaj pasigu la demandon, alie restas unu vivo.
Fine ni ŝarĝos la unuan demandon kiam la paĝa komponanto ŝarĝos:
Paĝo {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}
Ni vidu kiel rezultis:
2 komentoj, lasu la viajn
Mi sekvas la paŝojn kaj ĉio funkcias. Nur por kunlabori mi diras tion:
* Ne ŝanĝas la valoron de trafoj kaj maltrafoj. Vi devas aldoni tion al ĉiu butono en via klaka evento.
* Kaj tio en la linio:
if (Logic.acerto (num, 1)) {
ŝanĝu la 1 al la numero de la butono / respondo.
lolbimbo, mi trovas vian kontribuon interesa. Mi esperas novajn tutojn !!!
Dankon pro dividado.
Mi ŝatas, ke vi komentis ĉi tiujn punktojn, ĉar mi ne klarigis tion en la afiŝo, kio estas pli, mi ne memoras la punktojn, la sukcesojn kaj malsukcesojn, se vi rigardos ĝin, vi vidos tion, kiam ni alklakos la butonon, ni aldonas la poentojn la sukcesoj ... sed ili ne estas reflektitaj en la Etikedo, tial ni devas meti ĝin en ĝian tekstan posedaĵon por montri la punktojn:
Etikedo {
id: malsukcesoj
teksto: «Kulpoj:» + nfaults
koloro: "ruĝa"
}
Etikedo {
identigilo: sukcesoj
teksto: «Trafoj:» + naskita
}
Etikedo {
identigilo: punktoj
teksto: «Punktoj:» + npunktoj
tiparo: "meza"
}
Mi ankaŭ klarigos ĝin en la 3a parto.