Introducción:
Welnu, hier hebben we de post die volgt op de deel eenIn deze gaan we ons concentreren op het omgaan met de gegevens (vragen), en we beginnen met het logische deel van het spel, in de volgende zullen we de logica afmaken en de tijd en de 3 opties implementeren.
Databank:
Voor de database zullen we gebruiken u1db, dat is een database die de gegevens in het formaat opslaat JSON.
Laten we eerst eens kijken welke gegevens we moeten opslaan, we hebben 1 vraag (afgezien van de tekst van de vraag zou het leuk zijn om een identifier te hebben), met 4 mogelijke antwoorden, waarvan er maar 1 kan zijn, dus het document in JSON enkele vraag zou moeten zijn:
{ "id": 1, "question": "er zal dev.desdelinux.net ", "antwoorden" : { r1: "ja", r2: "nee", r3: "weet niet", r4: "dit is een vals antwoord" }, "correct": 3 }
Zoals we kunnen zien, hebben we gestructureerd in formaat JSON waar we een identifier hebben, een string met de vraag en r1, r2 die antwoord 1 en antwoord 2 vertegenwoordigen, hebben we tenslotte welke van de antwoorden juist is.
Laten we een beetje kijken hoe U1db werkt, het eerste dat we moeten doen om U1db te gebruiken, is de module importeren:
import U1db 1.0 as U1db
We verklaren de database:
U1db.Database {
id: aDatabase
path: "aU1DbDatabase"
}
De databases worden opgeslagen als aU1DbDatabase.u1db, nu maken we een document aan:
U1db.Document {
id: aDocument
database: aDatabase
docId: 'helloworld'
create: true
defaults: { "hello": "Hello World!" }
}
Waar we het formaat {«hallo»: «iets»} kunnen zien, om zoekopdrachten uit te voeren, om gegevens toe te voegen, gegevens te verkrijgen, ze te verwijderen enz. We hebben het U1db.Query-element.
Laten we naar onze applicatie gaan en onze database maken, zoals we hebben gezien, definiëren we de database:
U1db.Database {id: db vragen; pad: "questionsdb.u1db"}
Oké, laten we nu enkele standaardelementen in het databasedocument Questionsdb plaatsen:
U1db.Document { id: aDocument database: questionsdb docId: 'questions' create: true defaults: { "questions": [ {"question 'Er zal dev.desdelinux.net ?", "r1": ja", "r2": nee", "r3": neus", "r4" onwaar antwoord", "juist": "3" }, {"vraag static: Wie is Hagrid (Harry Potter)?", "r1" De vice-directeur van de school", "r2" De jachtopziener", "r3" De transformatieleraar", "r4": Een prefect", "correct": "2"}, {"question":Wat is de hoofdstad van IJsland?", "r1":Amsterdam", "r2":Reykjavik", "r3": Tbilisi ", "r4"Almaty", "correct": "2"} ] } }
Ik ben me ervan bewust dat de code niet wordt weergegeven zoals het hoort, maar als we kijken, zullen we zien dat we een element hebben ondervragen, die we met de »[]» specificeren dat er meerdere (het zijn geen statische) elementen kunnen zijn; in dit geval hebben we standaard 4, 4 vragen met hun respectievelijke antwoorden.
Om de documentelementen te krijgen JSON, kunnen we de identificatie specificeren van het document dat we hebben gemaakt (dat is een document). Laten we ons voorstellen dat we de tekst van de eerste vraag willen krijgen:
aDocument.contents.questions [0] .question
Deze coderegel retourneert ons de vraaginhoud van het document aDocument, van element 0 (de eerste in de index), namelijk: «Er zal dev.desdelinux.netto?" Als we het getal 1 in de index zetten, dan is het de tweede vraag.
Programmeren van de spellogica
Nu we weten hoe we moeten omgaan met de database waarin we de vragen hebben opgeslagen, gaan we de logica van het spel programmeren. Allereerst maken we een bestand aan JavaScript (.js): Nieuwe toevoegen -> Qt -> Js-bestand. ik zal hem bellen logic.js.
In het bestand gaan we verschillende functies maken om het js-bestand in ons qml-document te importeren:
importeer "logica.js" als Logica
We associëren de naam Logica, dus als we een functie willen aanroepen, doen we dat als Logica.funcion (), alsof het een object is dat zijn methoden heeft.
Voor nu, zodat het bericht niet te lang wordt, laten we de tijd van de vraag en de opties voor later, we zullen ons concentreren op de vragen en de punten, laten we eens kijken naar een functie die we zullen gebruiken om verder te gaan met de vraag:
functie nextQuestion (aantal) {// tijd = 0 vraag. tekst = aDocument.contents.questions [aantal] .vraag; 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; }
Zoals we kunnen zien, geven we het vraagnummer door waar we zijn als een argument en van hieruit worden de antwoorden op de knoppen en het vraaglabel geplaatst. Laten we nu kijken of het geselecteerde antwoord juist is:
functie hit (aantal, optie) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; if (option == correct_num) hit = true; terugkeer hit; }
De code spreekt voor zich, als de gekozen optie dezelfde is als die van de database, dan zal deze waar zijn, anders niet. Nu we deze functies hebben gedefinieerd, zullen we ze toepassen in onze qml-code.
Allereerst zullen we een variabele toevoegen die zal bepalen in welke vraag we ons bevinden, we zullen het num noemen; We zullen ook nog drie variabelen hebben: treffers, missers en punten.
property int num: 0 property int nfaults: 0 property int births: 0 property int npoints: 0
Aanvankelijk staan ze allemaal op 0.
Nu voegen we een onClick toe aan alle antwoordknoppen. onClick, zoals de naam al zegt, is een gebeurtenis die zal plaatsvinden wanneer op die knop wordt geklikt:
Knop {id: resp1 tekst: "Reactie 1" anchors.horizontalCenter: parent.horizontalCenter breedte: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 geboorten = geboorten + 1} anders {nfaults = nfaults + 1}}}
We zien dat door op de knop te klikken, het controleert of het klopt of niet, als het klopt, de punten optellen en de vraag doorgeven, anders blijft er één leven over.
Ten slotte zullen we de eerste vraag laten laden wanneer de pagina-component wordt geladen:
Pagina {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}
Laten we eens kijken hoe het bleek:
Ik volg de stappen en alles werkt. Gewoon om samen te werken zeg ik dat:
* Verandert de waarde van treffers en missers niet. U moet dat aan elke knop in uw klikgebeurtenis toevoegen.
* En dat in de rij:
if (Logic.acerto (num, 1)) {
U moet de 1 wijzigen voor het nummer van de knop / antwoord.
lolbimbo, ik vind je bijdrage interessant. Ik hoop nieuwe tuto's !!!
Bedankt voor het delen.
Ik vind het leuk dat je op deze punten hebt gereageerd omdat ik het niet duidelijk heb gemaakt in de post, wat meer is, ik herinner me de punten, de successen en mislukkingen niet, als je ernaar kijkt, zul je zien dat wanneer we op de knop klikken, we de punten de successen toevoegen ... maar ze worden niet weerspiegeld in het label, daarom moeten we het in de teksteigenschap plaatsen om de punten te tonen:
Etiket {
id: fouten
tekst: «Fouten:» + nfaults
kleur rood"
}
Etiket {
id: hits
tekst: «Hits:» + geboren
}
Etiket {
id: punten
tekst: «Punten:» + npunten
fontSize: "medium"
}
Ik zal het ook verduidelijken in deel 3.