Krijimi i një aplikacioni [Vala + Gtk 3] (pjesa e dytë)

Në këtë pjesë të dytë ne do të ndërtojmë logjikën e aplikacionit (për të parë dhe analizuar kodin më mirë për ta parë atë plotësisht se do ta vendos nën postim), por para kësaj do të duhet të instalojmë bibliotekat sqlite3 që do të përdorni për të ruajtur pyetjet dhe përgjigjet e tyre përkatëse:

sudo apt-get install libsqlite3-dev

Pasi të instalohen bibliotekat, do të na duhet vetëm një "duke përdorur Sqlite;" të jetë në gjendje të përdorë sqlite në vala.

Ne do të duhet të krijojmë një Tabelë që përmban:

Pyetje
Përgjigja 1
Përgjigja 2
Përgjigja 3
Përgjigja 4
e saktë

shembull:

Pregunta      = es desdelinux un buen blog?

Përgjigje1 = që blog nuk ekziston
Përgjigja2 = jo
Përgjigje3 = po
Përgjigje4 = përshëndetje

pasi të gjithë do ta dimë se përgjigja e saktë është 2 (e mira eshte 3)

e saktë = 3

Për të krijuar tabelën dhe për ta trajtuar atë do të duhet të dimë sql (mund ta kërkoni në motorin tuaj të preferuar të kërkimit), deklaratë për të krijuar tabelën:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Vendos pyetje…:

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

Mirë tani merrni një pyetje (renditur rastësisht):

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

Hapja e bazës së të dhënave:

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

Në rast se nuk e kemi krijuar tashmë (herën e parë që ekzekutojmë kodin) do të krijohet vetë.

Kap nga 2013-11-06 19:48:02

Krijoni tabelën dhe fusni pyetje:

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

Kontrolloni që të mos ketë ndonjë gabim:

 nëse (ec! = Sqlite.OK) {stderr.printf ("Gabim:% s \ n", errmsg); kthimi -1; }

Ne do të krijojmë 6 vargje që do të na ndihmojnë të bëjmë caktimin e pyetjeve dhe përgjigjeve.

 varg privat p; vargu privat r1; vargu privat r2; vargu privat r3; vargu privat r4; varg privat c;

Vendosja e një pyetjeje (të cilën e marrim nga test.db) me një SELECT:

 void private bd_select_questions () {string query = "ZGJIDH pyetjen, përgjigjen 1, përgjigjen 2, përgjigjen 3, përgjigjen 4, korrigjo NGA pyetjet RENDI NGA RANDOM ()"; int rc = db.përgatitja_v2 (pyetja, -1, jashtë stmt, null); kolonat int = stmt.column_count (); rc = stmt.step (); int kol; if (rc == Sqlite.ROW) {for (col = 0; col <cols; col ++) {string txt = stmt.column_text (col); nëse (kol == 0) {p = txt; } tjetër nëse (kol == 1) {r1 = txt; } tjetër nëse (kol == 2) {r2 = txt; } tjetër nëse (kol == 3) {r3 = txt; } tjetër nëse (kol == 4) {r4 = txt; } tjetër {c = txt; } // print ("% s =% s \ n", emri_shttm.kolonë (koloni), txt); }}}

Vendosni pyetjen në elementet grafike:

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

Vlerësoni:

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

Provoni nëse përgjigja është e saktë:


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

Logjika e kohës, siç e pamë në postimin e mëparshëm, duhet të shtojmë vetëm një nëse vërteton se koha nëse arrin 1 ne e japim përgjigjen si të pasaktë:

Kap nga 2013-11-03 12:58:42

Përpiloni (shtojmë –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Krijimi i tre butonave (50%, Freeze, Pass):

Ne krijojmë një Gbox të ri horizontal dhe shtojmë tre butonat, ne shtojmë këtë Gbox në atë që kishim krijuar tashmë:

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

Kap nga 2013-11-06 20:48:46

Kodi i plotë: http://paste.desdelinux.net/4882


3 komente, lini tuajën

Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: Miguel Ángel Gatón
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.

  1.   fabian dijo

    Faleminderit shumë për tutorialin, shumë interesant për ata prej nesh që duam të fillojmë me diçka të thjeshtë, do të më duhej më shumë ndihmë për pjesën e krijimit të tabelave të të dhënave. të fala

  2.   të nuancuar dijo

    Shume mire! E shpjeguar mirë dhe e detajuar. Faleminderit për të dhënat. (Y)

  3.   Rho dijo

    Faleminderit njeri! Shumë interesante si e para.
    Do të ishte mirë të shihnim shembuj të ndryshëm plotësues, komente të tipit (ato tip pop-up) ose menu (shkruani ato të paneleve që shfaqen në predhën elementare ose gnome-shell) ...
    E vërteta është shumë e mirë.
    Ne lexojmë: =)