Sovelluksen luominen [Vala + Gtk 3] (2. osa)

Tässä toisessa osassa rakennamme sovelluksen logiikan (jotta voimme nähdä ja analysoida koodin paremmin tarkastellakseni sitä kokonaisuudessaan, että laitan sen viestin alle), mutta ennen sitä meidän on asennettava sqlite3-kirjastot, joita käytämme voidaksemme tallentaa kysymykset ja vastaukset niihin:

sudo apt-get install libsqlite3-dev

Kun kirjastot on asennettu, tarvitsemme vain "käyttäen Sqlite;" pystyä käyttämään sqlite valassa.

Meidän on luotava taulukko, joka sisältää:

kysymys
Vastaus 1
Vastaus 2
Vastaus 3
Vastaus 4
oikea

esimerkiksi:

Pregunta      = es desdelinux un buen blog?

Vastaus1 = kyseistä blogia ei ole olemassa
Vastaus2 = ei
Vastaus3 = kyllä
Vastaus4 = hei

koska me kaikki tiedämme oikean vastauksen on 2 (hyvä on 3)

oikea = 3

Taulukon luomiseksi ja sen käsittelemiseksi meidän on tiedettävä sql (voit etsiä sitä suosikkihakukoneestasi), lause taulukon luomiseksi:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Lisää kysymyksiä…:

INSERT INTO preguntas (pregunta, respuesta1, respuesta2, respuesta3, respuesta4, correcto) VALUES ('es desdelinux un buen blog', 'no es ningun blog', 'no', 'si', 'hola', 3);

Ok, nyt saat kysymyksen (lajiteltu satunnaisesti):

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

Tietokannan avaaminen:

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

Jos meillä ei ole sitä jo luotu (ensimmäisen kerran suoritamme koodin), se luo itsensä.

Sieppaa 2013-11-06 19:48:02

Luo taulukko ja lisää kysymyksiä:

 private void bd () {
string errmsg;
// Abre la base de datos / Crea la base de datos
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 ());
}
if (!FileUtils.test ("test.db", FileTest.IS_REGULAR)) {
string query = """
CREATE TABLE preguntas (
pregunta TEXT,
respuesta1 TEXT,
respuesta2 TEXT,
respuesta3 TEXT,
respuesta4 TEXT,
correcto INT
);

INSERT INTO preguntas (pregunta, respuesta1, respuesta2, respuesta3, respuesta4, correcto) VALUES ('es desdelinux un buen blog', 'no es ningun blog', 'no', 'si', 'hola', 3);
INSERT INTO preguntas (pregunta, respuesta1, respuesta2, respuesta3, respuesta4, correcto) VALUES ('5+5', '25', '10', '3', '5', 2);
""";

ec = db.exec (query, null, out errmsg);
if (ec != Sqlite.OK) {
stderr.printf ("Error: %s\n", errmsg);
}
}
}

Tarkista, ettei virheitä ole:

 if (ec! = Sqlite.OK) {stderr.printf ("Virhe:% s \ n", virhe); paluu -1; }

Luomme 6 merkkijonoa, jotka auttavat meitä tekemään kysymyksiä ja vastauksia.

 yksityinen merkkijono p; yksityinen merkkijono r1; yksityinen merkkijono r2; yksityinen merkkijono r3; yksityinen merkkijono r4; yksityinen merkkijono c;

Kysymyksen (jonka saamme test.db: ltä) sijoittaminen SELECTilla:

 private void bd_select_questions () {merkkijono kysely = "VALITSE kysymys, vastaus1, vastaus2, vastaus3, vastaus4, korjaa kysymyksistä Tilauksen satunnaisuus ()" int rc = db.prepare_v2 (kysely, -1, out stmt, null); int cols = keskimääräinen sarakemäärä (); rc = stmt.step (); int col; jos (rc == Sqlite.ROW) {for (col = 0; col <cols; col ++) {merkkijono txt = stmt.column_text (col); jos (col == 0) {p = txt; } else if (col == 1) {r1 = txt; } else if (col == 2) {r2 = txt; } else if (col == 3) {r3 = txt; } else if (col == 4) {r4 = txt; } else {c = txt; } // tulosta ("% s =% s \ n", stmt.column_name (col), txt); }}}

Laita kysymys graafisiin elementteihin:

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

Hinta:

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

Kokeile, onko vastaus oikea:


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

Aikalogiikka, kuten näimme edellisessä viestissä, meidän on lisättävä vain, jos se vahvistaa, että annamme vastauksen virheellisenä ajan, jos se saavuttaa 1:

Sieppaa 2013-11-03 12:58:42

Käännä (lisäämme –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Kolmen painikkeen luominen (50%, Freeze, Pass):

Luomme uuden vaakasuoran Gbox-levyn ja lisätään kolme painiketta, lisätään tämä Gbox jo luomaamme:

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

Sieppaa 2013-11-06 20:48:46

Koko koodi: http://paste.desdelinux.net/4882


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.   Fabian dijo

    Paljon kiitoksia opetusohjelmasta, erittäin mielenkiintoinen niille meistä, jotka haluavat aloittaa jollakin yksinkertaisella. Tarvitsisin lisää apua tietotaulukoiden luomisessa. Kippis

  2.   vivahteikas dijo

    Oikein hyvä! Hyvin selitetty ja yksityiskohtainen. Kiitos tiedoista. (ja)

  3.   rho dijo

    Kiitos, kaveri! Erittäin mielenkiintoinen ensimmäisenä.
    Olisi hyvä nähdä erilaiset täydentävät instanssit, tyyppikommentit (tällaiset ponnahdusikkunat) tai valikot (kirjoita paneelien elementit, jotka näkyvät alkeis- tai tonttu-kuoressa) ...
    Totuus, erittäin hyvä.
    Luemme: =)