Aip a chruthú [Vala + Gtk 3] (2ú cuid)

Sa dara cuid seo tógfaimid loighic an fheidhmchláir (chun an cód a fheiceáil agus a anailísiú níos fearr chun féachaint air ina iomláine go gcuirfidh mé é faoin bpost), ach roimhe sin beidh orainn na leabharlanna sqlite3 a shuiteáil a dhéanfaimid a úsáid chun a bheith in ann na ceisteanna agus a gcuid freagraí faoi seach a shábháil:

sudo apt-get install libsqlite3-dev

Nuair a bheidh na leabharlanna suiteáilte ní bheidh de dhíth orainn ach "ag baint úsáide as Sqlite;" a bheith in ann sqlite a úsáid i vala.

Beidh orainn Tábla a chruthú ina mbeidh:

Ceist
Freagra 1
Freagra 2
Freagra 3
Freagra 4
ceart

sampla:

Ceist = an ó bhlag maith é Linux?

Freagra1 = níl an blag sin ann
Freagra2 = níl
Freagra3 = sea
Freagra4 = Dia duit

mar beidh a fhios againn go léir gurb é 2 an freagra ceart (is é an ceann maith 3)

ceart = 3

Chun an tábla a chruthú agus a láimhseáil caithfimid sql a bheith ar eolas againn (is féidir leat é a chuardach san inneall cuardaigh is fearr leat), ráiteas chun an tábla a chruthú:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Cuir isteach ceisteanna…:

CUIR ISTEACH I gceisteanna (ceist, freagra1, freagra2, freagra3, freagra4, ceart) LUACHANNA (‘is blag maith é ó Linux’, ‘ní blag é’, ‘níl’, ‘tá’, ‘Dia duit’, 3);

Faigh ceist anois (curtha in eagar go randamach):

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

An bunachar sonraí a oscailt:

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

I gcás nach bhfuil sé cruthaithe againn cheana (an chéad uair a rithimid an cód) cruthóidh sé é féin.

Gabháil ó 2013-11-06 19:48:02

Cruthaigh an tábla agus cuir isteach ceisteanna:

 neamhní príobháideach bd () {string errmsg; // Oscail an bunachar sonraí / Cruthaigh an bunachar sonraí int ec = Sqlite.Database.open ("test.db", amach db); más rud é (ec! = Sqlite.OK) {stderr.printf ("Ní féidir an bunachar sonraí a oscailt:% d:% s \ n", db.errcode (), db.errmsg ()); } más rud é (! fileUtils.test ("test.db", FileTest.IS_REGULAR)) {string query = "" "CREATE ceisteanna TÁBLA (ceist TEXT, freagra1 TEXT, freagra2 TEXT, freagra3 TEXT, freagra4 TEXT, INT ceart); INSERT LÁTHAIR ceisteanna (ceist, freagra1, freagra2, freagra3, freagra4, ceart) LUACHANNA (‘is blag maith é ó Linux’, ‘ní blag ar bith é’, ‘níl’, ‘tá’, ‘Dia duit’, 3); INSERT INTO ceisteanna (ceist, freagra1, freagra2, freagra3, freagra4, ceart) LUACHANNA ('5 + 5', '25', '10', '3', '5', 2); "" "; ec = db.exec (ceist, null, amach errmsg); más rud é (ec! = Sqlite.OK) {stderr.printf ("Earráid:% s \ n", errmsg); }}}

Seiceáil nach bhfuil aon earráid ann:

 más rud é (ec! = Sqlite.OK) {stderr.printf ("Earráid:% s \ n", errmsg); filleadh -1; }

Cruthóimid 6 shraith a chabhróidh linn ceisteanna agus freagraí a shannadh.

 sreangán príobháideach p; sreang phríobháideach r1; sreang phríobháideach r2; sreang phríobháideach r3; sreang phríobháideach r4; sreang phríobháideach c;

SELECT a chur ar cheist (a fhaighimid ó test.db):

 neamhní príobháideach bd_select_questions () {string query = "SELECT ceist, freagra1, freagra2, freagra3, freagra4, ceart Ó cheisteanna ORDÚ AG RANDOM ()"; int rc = db.prepare_v2 (ceist, -1, amach stmt, null); int cols = stmt.column_count (); rc = stmt.step (); int col; más rud é (rc == Sqlite.ROW) {le haghaidh (col = 0; col <cols; col ++) {string txt = stmt.column_text (col); más rud é (col == 0) {p = txt; } eile más rud é (col == 1) {r1 = txt; } eile más rud é (col == 2) {r2 = txt; } eile más rud é (col == 3) {r3 = txt; } eile más rud é (col == 4) {r4 = txt; } eile {c = txt; } // print ("% s =% s \ n", stmt.column_name (col), txt); }}}

Cuir an cheist ar na heilimintí grafacha:

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

Ráta:

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

Bain triail as an bhfuil an freagra ceart:


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

Loighic ama, mar a chonaiceamar sa phost roimhe seo, ní mór dúinn ach ceann a chur leis má fhíoraíonn sé go dtugann an freagra mícheart an t-am má shroicheann sé 1:

Gabháil ó 2013-11-03 12:58:42

Tiomsú (cuirimid –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Trí cnaipí a chruthú (50%, Reo, Pas):

Cruthaímid Bosca G cothrománach nua agus cuirimid na trí chnaipe leis, cuirimid an Gbox seo leis an gceann a bhí cruthaithe againn cheana féin:

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

Gabháil ó 2013-11-06 20:48:46

 

Cód iomlán: http://paste.desdelinux.net/4882


Cloíonn ábhar an ailt lenár bprionsabail eitic eagarthóireachta. Chun earráid a thuairisciú cliceáil anseo.

3 trácht, fág mise

Fág do thrácht

Ní thabharfar do sheoladh r-phoist a fhoilsiú. Réimsí riachtanacha atá marcáilte le *

*

*

  1. Freagrach as na sonraí: Miguel Ángel Gatón
  2. Cuspóir na sonraí: SPAM a rialú, bainistíocht trácht.
  3. Legitimation: Do thoiliú
  4. Na sonraí a chur in iúl: Ní chuirfear na sonraí in iúl do thríú páirtithe ach amháin trí oibleagáid dhlíthiúil.
  5. Stóráil sonraí: Bunachar sonraí arna óstáil ag Occentus Networks (EU)
  6. Cearta: Tráth ar bith is féidir leat do chuid faisnéise a theorannú, a aisghabháil agus a scriosadh.

  1.   Fabian a dúirt

    Go raibh míle maith agat as an rang teagaisc, an-spéisiúil dóibh siúd againn atá ag iarraidh tosú le rud simplí, bheadh ​​tuilleadh cabhrach ag teastáil uaim leis an gcuid de na táblaí sonraí a chruthú. Cheers

  2.   nuanced a dúirt

    An-mhaith! Mínithe agus mionsonraithe go maith. Go raibh maith agat as na sonraí. (agus)

  3.   a dúirt

    Go raibh maith agat fear! An-suimiúil mar an chéad.
    Ba mhaith an rud na cásanna comhlántacha éagsúla, na cineálacha tráchtaireachta (na cineálacha pop-ups sin) nó na biachláir a fheiceáil (clóscríobh na painéil sin atá le feiceáil i mblaosc tosaigh nó gnome-shell) ...
    Tá an fhírinne an-mhaith.
    Léimid: =)