Skep 'n app [Vala + Gtk 3] (2de deel)

In hierdie tweede deel sal ons die logika van die toepassing opbou (om die kode beter te sien en te ontleed om volledig daarna te kyk en dit onder die boodskap te plaas), maar voor dit moet ons die sqlite3-biblioteke installeer wat ons sal gebruik om die vrae en hul onderskeie antwoorde op te slaan:

sudo apt-get install libsqlite3-dev

Nadat die biblioteke geïnstalleer is, is slegs 'n gebruik van Sqlite; ' om sqlite in vala te kan gebruik.

Ons sal 'n tabel moet opstel wat die volgende bevat:

vraag
Antwoord 1
Antwoord 2
Antwoord 3
Antwoord 4
korrek is

byvoorbeeld:

Vraag = is van Linux 'n goeie blog?

Antwoord1 = daardie blog bestaan ​​nie
Antwoord2 = nee
Antwoord3 = ja
Antwoord4 = hallo

soos ons almal sal weet, is die regte antwoord 2 (die goeie een is 3)

korrek = 3

Om die tafel te maak en te hanteer, moet ons sql ken (u kan dit soek in u gunsteling soekenjin), stelling om die tabel te skep:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Voeg vrae in ...:

VOEG IN VRAE (vraag, antwoord1, antwoord2, antwoord3, antwoord4, korrek) WAARDES ('dit is 'n goeie blog van Linux', 'dit is nie 'n blog nie', 'nee', 'ja', 'hallo', 3);

Ok, kry nou 'n vraag (willekeurig gesorteer):

SELECT pregunta, respuesta1, respuesta2, respuesta3, respuesta4, correcto FROM preguntas ORDER BY RANDOM()

Die opening van die databasis:

int ec = Sqlite.Database.open ("test.db", out db);
if (ec != Sqlite.OK) {
stderr.printf ("Can't open database: %d: %s\n", db.errcode (), db.errmsg ());
}

As ons dit nog nie geskep het nie (die eerste keer dat ons die kode gebruik), sal dit self skep.

Vaslegging van 2013-11-06 19:48:02

Maak die tabel en voeg vrae in:

 private nietig bd () {string errmsg; // Maak die databasis oop / Skep die databasis int ec = Sqlite.Database.open ("test.db", out db); as (ec! = Sqlite.OK) {stderr.printf ("Kan databasis nie oopmaak nie:% d:% s \ n", db.errcode (), db.errmsg ()); } if (! FileUtils.test ("test.db", FileTest.IS_REGULAR)) {string query = "" "TAFEL vrae (vraag TEKS, antwoord1 TEKS, antwoord2 TEKS, antwoord3 TEKS, antwoord4 TEKS, korrekte INT); INVOEGING IN VRAE (vraag, antwoord1, antwoord2, antwoord3, antwoord4, korrek) WAARDES ('dit is 'n goeie blog van Linux', 'dit is geen blog nie', 'nee', 'ja', 'hallo', 3); INVOEG IN vrae (vraag, antwoord1, antwoord2, antwoord3, antwoord4, korrek) WAARDES ('5 + 5', '25', '10', '3', '5', 2); "" "; ec = db.exec (navraag, null, out errmsg); as (ec! = Sqlite.OK) {stderr.printf ("Fout:% s \ n", errmsg); }}}

Kyk of daar geen fout is nie:

 as (ec! = Sqlite.OK) {stderr.printf ("Fout:% s \ n", errmsg); terugkeer -1; }

Ons sal 6 snare maak wat ons sal help om vrae en antwoorde op te stel.

 private string p; privaat string r1; private string r2; private string r3; private string r4; private string c;

Stel 'n vraag (wat ons van test.db kry) met 'n SELECT:

 private leemte bd_select_questions () {string query = "KIES vraag, antwoord1, antwoord2, antwoord3, antwoord4, korrek VANAF vrae BESTEL OP RANDOM ()"; int rc = db.prepare_v2 (navraag, -1, out stmt, null); int cols = stmt.column_count (); rc = stmt.step (); int kol; as (rc == Sqlite.ROW) {vir (col = 0; col <cols; col ++) {string txt = stmt.column_text (col); as (kol == 0) {p = txt; } anders as (kol == 1) {r1 = txt; } anders as (kol == 2) {r2 = txt; } anders as (kol == 3) {r3 = txt; } anders as (kol == 4) {r4 = txt; } anders {c = txt; } // druk ("% s =% s \ n", stmt.column_name (col), txt); }}}

Stel die vraag aan die grafiese elemente:

private void next_pregunta () {
this.pregunta.set_label(this.p);
this.resposta1.set_label(this.r1);
this.resposta2.set_label(this.r2);
this.resposta3.set_label(this.r3);
this.resposta4.set_label(this.r4);
}

Koers:

private void puntua () {
this.punts = this.punts + 50;
this.puntos.set_label(this.punts.to_string());
}

Probeer of die antwoord korrek is:


private void correcto (string cor) {
if (this.c == cor) {
this.puntua ();
this.bd_select_preguntas ();
this.next_pregunta();
}
else{
//incorrecto
}
}

 

resposta1.clicked.connect (() => {
this.correcto("1");
});
resposta2.clicked.connect (() => {
this.correcto("2");
});
resposta3.clicked.connect (() => {
this.correcto("3");
});
resposta4.clicked.connect (() => {
this.correcto("4");
});

Tydlogika, soos ons reeds in die vorige berig gesien het, hoef ons net 'n by te voeg as dit bevestig dat die tyd as dit 1 bereik, ons die antwoord as verkeerd gee:

Vaslegging van 2013-11-03 12:58:42

Stel saam (ons voeg –pkg sqlite3 by)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Maak drie knoppies (50%, vries, slaag):

Ons skep 'n nuwe horisontale Gbox en voeg die drie knoppies daarby, ons voeg hierdie Gbox by die een wat ons reeds geskep het:

this.box2 = new Gtk.Box (Gtk.Orientation.HORIZONTAL, 0);
var button1 = new Gtk.Button.with_label ("50%");
var button2 = new Gtk.Button.with_label ("congelar");
var button3 = new Gtk.Button.with_label ("passar");
this.box2.pack_start(button1);
this.box2.pack_start(button2);
this.box2.pack_start(button3);

this.box.pack_start (box2);

Vaslegging van 2013-11-06 20:48:46

 

Volledige kode: http://paste.desdelinux.net/4882


Die inhoud van die artikel voldoen aan ons beginsels van redaksionele etiek. Klik op om 'n fout te rapporteer hier.

3 kommentaar, los joune

Laat u kommentaar

Jou e-posadres sal nie gepubliseer word nie. Verpligte velde gemerk met *

*

*

  1. Verantwoordelik vir die data: Miguel Ángel Gatón
  2. Doel van die data: Beheer SPAM, bestuur van kommentaar.
  3. Wettiging: U toestemming
  4. Kommunikasie van die data: Die data sal nie aan derde partye oorgedra word nie, behalwe deur wettige verpligtinge.
  5. Datastoor: databasis aangebied deur Occentus Networks (EU)
  6. Regte: U kan u inligting te alle tye beperk, herstel en verwyder.

  1.   Fabian dijo

    Baie dankie vir die tutoriaal, baie interessant vir diegene onder ons wat met iets eenvoudigs wil begin. Ek sal meer hulp nodig hê met die skep van die datatabelle. Cheers

  2.   genuanseer dijo

    Baie goed! Goed verduidelik en gedetailleerd. Dankie vir die data. (en)

  3.   rho dijo

    Dankie man! Baie interessant as die eerste.
    Dit sal goed wees om die verskillende aanvullende gevalle, tipe opmerkings (die soort pop-ups) of menu's te sien (tik die panele in elementêre of kabouter-dop) ...
    Die waarheid, baie goed.
    Ons lees: =)