Kirkirar app [Vala + Gtk 3] (kashi na 2)

A wannan bangare na biyu zamu gina ma'anar aikace-aikacen (don gani da bincika lambar mafi kyau don kalle shi cikakke cewa zan sanya shi ƙasa da post ɗin), amma kafin haka muna buƙatar shigar da ɗakunan karatu na sqlite3 waɗanda za mu Yi amfani da su don samun damar adana tambayoyin da amsoshin su:

sudo apt-get install libsqlite3-dev

Da zarar an shigar da ɗakunan karatu za mu buƙaci kawai "ta amfani da Sqlite;" don samun damar amfani da sqlite a cikin vala.

Muna buƙatar ƙirƙirar Tebur wanda ya ƙunshi:

Tambaya
Amsa 1
Amsa 2
Amsa 3
Amsa 4
daidai

misali:

Pregunta      = es desdelinux un buen blog?

Amsa1 = wancan shafin babu shi
Amsa2 = a'a
Amsa3 = haka ne
Amsa4 = hello

kamar yadda dukkanmu zamu san amsar daidai itace 2 (mai kyau shine 3)

daidai = 3

Don ƙirƙirar teburin da sarrafa shi muna buƙatar sanin sql (zaka iya nemanta a cikin injin binciken da kake so), sanarwa don ƙirƙirar tebur:

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

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

Ok yanzu sami tambaya (an jera kaɗan):

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

Ana buɗe bayanan:

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

Idan ba mu da shi ba mun riga mun ƙirƙira shi (farkon lokacin da muke gudanar da lambar) zai ƙirƙiri kanta.

Kama daga 2013-11-06 19:48:02

Irƙiri tebur kuma saka tambayoyi:

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

Duba cewa babu kuskure:

 if (ec! = Sqlite.OK) {stderr.printf ("Kuskure:% s \ n", errmsg); dawowa -1; }

Zamu kirkiro kirtani guda 6 wadanda zasu taimaka mana wajen sanya tambayoyi da amsoshi.

 kebul mai zaman kansa p; kebul mai zaman kansa r1; kebul mai zaman kansa r2; kirtani mai zaman kansa r3; kebul mai zaman kansa r4; keɓaɓɓen zaren c;

Sanya tambaya (wanda muke samu daga test.db) tare da zaɓi:

 keɓaɓɓiyar wofi bd_select_questions () {string query = "Zabi tambaya, amsa1, amsa2, amsawa 3, amsa4, daidai DAGA tambayoyin TAMBAYA DA BAUTAR ()"; int rc = db. shirya_v2 (tambaya, -1, fita stmt, mara kyau); int cols = stmt.column_count (); rc = stmt.step (); int col; idan (rc == Sqlite.ROW) {don (col = 0; col <cols; col ++) {string txt = stmt.column_text (col); idan (col == 0) {p = txt; } kuma idan idan (col == 1) {r1 = txt; } kuma idan (col == 2) {r2 = txt; } kuma idan idan (col == 3) {r3 = txt; } kuma idan (col == 4) {r4 = txt; } kuma {c = txt; } // bugawa ("% s =% s \ n", stmt.column_name (col), txt); }}}

Sanya tambayar ga abubuwan zane:

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

Matsayi:

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

Gwada idan amsar tayi daidai:


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

Hankalin lokaci, kamar yadda muka gani a cikin post ɗin da ya gabata, kawai zamu ƙara idan idan hakan ya tabbatar da cewa lokacin da ya kai 1 zamu ba da amsar azaman ba daidai bane:

Kama daga 2013-11-03 12:58:42

Tattara (mun ƙara –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Creatirƙirar maɓalli uku (50%, Daskare, Wucewa):

Mun kirkiro sabon Gbox a kwance kuma mun sanya maballin uku a ciki, muna ƙara wannan Gbox ɗin da muka riga muka ƙirƙira:

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

Kama daga 2013-11-06 20:48:46

Kammalallen lambar: http://paste.desdelinux.net/4882


Bar tsokaci

Your email address ba za a buga. Bukata filayen suna alama da *

*

*

  1. Wanda ke da alhakin bayanan: Miguel Ángel Gatón
  2. Manufar bayanan: Sarrafa SPAM, sarrafa sharhi.
  3. Halacci: Yarda da yarda
  4. Sadarwar bayanan: Ba za a sanar da wasu bayanan ga wasu kamfanoni ba sai ta hanyar wajibcin doka.
  5. Ajiye bayanai: Bayanin yanar gizo wanda Occentus Networks (EU) suka dauki nauyi
  6. Hakkoki: A kowane lokaci zaka iyakance, dawo da share bayanan ka.

  1.   Fabian m

    Na gode sosai don darasin, abin ban sha'awa ne ga waɗanda muke son farawa da abu mai sauƙi, Ina buƙatar ƙarin taimako game da ɓangaren ƙirƙirar teburin bayanai. Murna

  2.   nuanced m

    Yayi kyau sosai! Yayi bayani dalla-dalla. Godiya ga bayanan. (da)

  3.   rho m

    Godiya ga mutum! Mai ban sha'awa kamar na farko.
    Zai yi kyau a ga lokuta daban-daban da suka dace, rubuta irin maganganun (wadancan pop pop) ko menus (rubuta irin na bangarorin da ke bayyana a matakin farko ko kuma gnome-shell) ...
    Gaskiya, tayi kyau.
    Mun karanta: =)