Lietotnes izveide [Vala + Gtk 3] (2. daļa)

Šajā otrajā daļā mēs izveidosim lietojumprogrammas loģiku (lai kodu labāk redzētu un analizētu, lai to pilnībā apskatītu, ka es to ievietošu zem ziņas), bet pirms tam mums būs jāinstalē sqlite3 bibliotēkas, kuras mēs izveidosim izmantojiet, lai saglabātu jautājumus un to attiecīgās atbildes:

sudo apt-get install libsqlite3-dev

Kad bibliotēkas ir instalētas, mums būs nepieciešams tikai "izmantojot Sqlite;" lai varētu izmantot sqlite valā.

Mums būs jāizveido tabula, kurā ir:

Jautājums
1. atbilde
2. atbilde
3. atbilde
4. atbilde
pareizi

piemērs:

Jautājums = ir desdelinux labs emuārs?

Atbilde1 = emuārs nepastāv
Atbilde2 = nē
Atbilde3 = jā
Atbilde4 = sveiki

kā mēs visi zināsim, pareizā atbilde ir 2 (labais ir 3)

pareizi = 3

Lai izveidotu tabulu un rīkotos ar to, mums būs jāzina sql (to varat meklēt savā iecienītākajā meklētājprogrammā), paziņojums, lai izveidotu tabulu:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Ievietojiet jautājumus…:

INSERT INTO jautājumiem (jautājums, atbilde1, atbilde2, atbilde3, atbilde4, pareiza) VĒRTĪBAS ('es desdelinux labs emuārs', 'tas nav emuārs', 'nē', 'jā', 'labdien', 3);

Labi, tagad saņemiet jautājumu (kārtots nejauši):

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

Datu bāzes atvēršana:

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

Gadījumā, ja mums tas vēl nav izveidots (pirmo reizi palaižot kodu), tas pats izveidos.

Uzņemiet no 2013. gada 11. septembra 06:19:48

Izveidojiet tabulu un ievietojiet jautājumus:

 private void bd() { virkne errmsg; // Atvērt datu bāzi / Izveidot datubāzi int ec = Sqlite.Database.open("test.db", out db); if (ec != Sqlite.OK) { stderr.printf ("Nevar atvērt datu bāzi: %d: %s\n", db.errcode (), db.errmsg ()); } if (!FileUtils.test ("test.db", FileTest.IS_REGULAR)) { string query = """ IZVEIDOT TABULAS jautājumus ( jautājuma TEKSTS, atbildes 1 TEKSTS, atbildes 2 TEKSTS, atbildes 3 TEKSTS, atbilde 4 TEKSTS, pareizi INT ); INSERT INTO jautājumiem (jautājums, atbilde1, atbilde2, atbilde3, atbilde4, pareiza) VĒRTĪBAS ('is desdelinux labs emuārs', 'tas nav emuārs', 'nē', 'jā', 'labdien', 3); INSERT INTO jautājumiem (jautājums, atbilde1, atbilde2, atbilde3, atbilde4, pareiza) VĒRTĪBAS ('5+5', '25', '10', '3', '5', 2); """; ec = db.exec (vaicājums, null, out errmsg); if (ec != Sqlite.OK) { stderr.printf ("Kļūda: %s\n", errmsg); } } }

Pārbaudiet, vai nav kļūdas:

 if (ec! = Sqlite.OK) {stderr.printf ("Kļūda:% s \ n", kļūdas); atgriešanās -1; }

Mēs izveidosim 6 virknes, kas palīdzēs mums uzdot jautājumus un atbildes.

 privātā virkne p; privātā virkne r1; privātā virkne r2; privātā virkne r3; privātā virkne r4; privātā virkne c;

Jautājuma (ko iegūstam no test.db) ievietošana ar SELECT:

 private void bd_select_questions () {string query = "ATLASĪT jautājumu, atbildi1, atbildi2, atbildi3, atbildēt4, izlabot NO JAUTĀJUMIEM PASŪTĪJUMU PATĪKAM ()"; int rc = db.prepare_v2 (vaicājums, -1, out stmt, null); int cols = stmt.column_count (); rc = stmt.step (); int col; if (rc == Sqlite.ROW) {for (kol = 0; kol <kols; kol ++) {virkne txt = stmt.kolonnas_teksts (kol); ja (kols == 0) {p = txt; } else if (kol == 1) {r1 = txt; } else if (kol == 2) {r2 = txt; } else if (kol == 3) {r3 = txt; } else if (kol == 4) {r4 = txt; } cits {c = txt; } // drukāt ("% s =% s \ n", stmt.column_name (col), txt); }}}

Uzdodiet jautājumu grafiskajiem elementiem:

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

Novērtēt:

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

Izmēģiniet, vai atbilde ir pareiza:


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

Laika loģika, kā mēs redzējām iepriekšējā ziņojumā, mums jāpievieno tikai tad, ja tas apstiprina, ka laiks, ja tas sasniedz 1, atbildi sniedzam kā nepareizu:

Uzņemiet no 2013. gada 11. septembra 03:12:58

Kompilēt (mēs pievienojam –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Trīs pogu izveide (50%, Freeze, Pass):

Mēs izveidojam jaunu horizontālu Gbox un pievienojam trīs pogas, mēs pievienojam šo Gbox jau izveidotajai:

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

Uzņemiet no 2013. gada 11. septembra 06:20:48

Pilns kods: http://paste.desdelinux.net/4882


Atstājiet savu komentāru

Jūsu e-pasta adrese netiks publicēta. Obligātie lauki ir atzīmēti ar *

*

*

  1. Atbildīgais par datiem: Migels Ángels Gatóns
  2. Datu mērķis: SPAM kontrole, komentāru pārvaldība.
  3. Legitimācija: jūsu piekrišana
  4. Datu paziņošana: Dati netiks paziņoti trešām personām, izņemot juridiskus pienākumus.
  5. Datu glabāšana: datu bāze, ko mitina Occentus Networks (ES)
  6. Tiesības: jebkurā laikā varat ierobežot, atjaunot un dzēst savu informāciju.

  1.   Fabian teica

    Liels paldies par apmācību, kas ir ļoti interesanta tiem no mums, kuri vēlas sākt ar kaut ko vienkāršu, man būtu nepieciešama lielāka palīdzība datu tabulu veidošanā. Priekā

  2.   niansēts teica

    Ļoti labi! Labi izskaidrots un detalizēts. Paldies par datiem. (un)

  3.   rho teica

    Paldies vecīt! Ļoti interesants kā pirmais.
    Būtu labi redzēt dažādus papildu gadījumus, tipa komentārus (šāda veida uznirstošos logus) vai izvēlnes (ierakstiet tos paneļus, kas parādās elementārā vai rūķa apvalkā) ...
    Patiesība ir ļoti laba.
    Mēs lasām: =)