Создание приложения [Vala + Gtk 3] (2-я часть)

Во второй части мы построим логику работы приложения (чтобы увидеть и проанализировать код, лучше взглянуть на него полностью, я помещу его под постом), но перед этим нам нужно будет установить библиотеки sqlite3, которые мы будем используйте для сохранения вопросов и соответствующих ответов на них:

sudo apt-get install libsqlite3-dev

После установки библиотек нам понадобится только «using Sqlite;» чтобы иметь возможность использовать sqlite в vala.

Нам нужно будет создать таблицу, содержащую:

Вопрос
Ответ 1
Ответ 2
Ответ 3
Ответ 4
верный

пример:

Вопрос = есть desdelinux хороший блог?

Ответ1 = этого блога не существует
Ответ2 = нет
Ответ3 = да
Answer4 = привет

поскольку мы все знаем, что правильный ответ - 2 (хороший - 3)

правильно = 3

Чтобы создать таблицу и обработать ее, нам нужно знать sql (вы можете искать его в своей любимой поисковой системе), инструкция для создания таблицы:

CREATE TABLE preguntas (pregunta TEXT, respuesta1 TEXT, respuesta2 TEXT, respuesta3 TEXT, respuesta4 TEXT, correcto INT);
Вставьте вопросы…:

INSERT INTO вопросы (вопрос, ответ1, ответ2, ответ3, ответ4, правильный) ЗНАЧЕНИЯ ('es desdelinux хороший блог», «это не блог», «нет», «да», «привет», 3);

Хорошо, теперь получите вопрос (отсортированный случайным образом):

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

Открытие базы данных:

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

Если у нас он еще не создан (при первом запуске кода), он создаст себя.

Захват от 2013 11:06:19

Создайте таблицу и вставьте вопросы:

 частная пустота bd () {строка errmsg; // Открыть базу данных/Создать базу данных int ec = Sqlite.Database.open("test.db", out db); if (ec != Sqlite.OK) { stderr.printf ("Невозможно открыть базу данных: %d: %s\n", db.errcode (), db.errmsg ()); } if (!FileUtils.test ("test.db", FileTest.IS_REGULAR)) { string query = """ CREATE TABLE questions ( ТЕКСТ вопроса, ТЕКСТ ответа1, ТЕКСТ ответа2, ТЕКСТ ответа3, ТЕКСТ ответа4, правильный INT ); INSERT Вопросы INTO (вопрос, ответ1, ответ2, ответ3, ответ4, правильный) ЗНАЧЕНИЯ ('является desdelinux хороший блог», «это не блог», «нет», «да», «привет», 3); INSERT INTO вопросы (вопрос, ответ1, ответ2, ответ3, ответ4, правильный) ЗНАЧЕНИЯ ('5+5', '25', '10', '3', '5', 2); """; ec = db.exec (query, null, out errmsg); if (ec != Sqlite.OK) { stderr.printf ("Ошибка: %s\n", errmsg); } } }

Убедитесь, что ошибки нет:

 if (ec! = Sqlite.OK) {stderr.printf ("Ошибка:% s \ n", errmsg); возврат -1; }

Мы создадим 6 строк, которые помогут нам составить задание вопросов и ответов.

 частная строка p; частная строка r1; частная строка r2; частная строка r3; частная строка r4; частная строка c;

Размещение вопроса (который мы получаем из test.db) с помощью SELECT:

 private void bd_select_questions () {string query = "ВЫБРАТЬ вопрос, ответ1, ответ2, ответ3, ответ4, исправить ИЗ вопросов ORDER BY RANDOM ()"; int rc = db.prepare_v2 (запрос, -1, out stmt, null); int cols = stmt.column_count (); rc = stmt.step (); int col; if (rc == Sqlite.ROW) {для (col = 0; col <cols; col ++) {строка txt = stmt.column_text (col); если (col == 0) {p = txt; } иначе, если (col == 1) {r1 = txt; } иначе, если (col == 2) {r2 = txt; } иначе, если (col == 3) {r3 = txt; } иначе, если (col == 4) {r4 = txt; } else {c = txt; } // print ("% s =% s \ n", stmt.column_name (col), txt); }}}

Задайте вопрос графическим элементам:

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

Ставка:

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

Попробуйте, если ответ правильный:


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

Логика времени, как мы видели в предыдущем посте, нам нужно только добавить, если это подтверждает, что время, если оно достигает 1, мы даем ответ как неправильный:

Захват от 2013 11:03:12

Компилировать (добавляем –pkg sqlite3)
valac -v lol.vala --pkg gtk+-3.0 --pkg sqlite3

Создание трех кнопок (50%, Freeze, Pass):

Мы создаем новый горизонтальный Gbox и добавляем к нему три кнопки, мы добавляем этот Gbox к уже созданному:

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

Захват от 2013 11:06:20

Полный код: http://paste.desdelinux.net/4882


3 комментариев, оставьте свой

Оставьте свой комментарий

Ваш электронный адрес не будет опубликован. Обязательные для заполнения поля помечены *

*

*

  1. Ответственный за данные: Мигель Анхель Гатон
  2. Назначение данных: контроль спама, управление комментариями.
  3. Легитимация: ваше согласие
  4. Передача данных: данные не будут переданы третьим лицам, кроме как по закону.
  5. Хранение данных: база данных, размещенная в Occentus Networks (ЕС)
  6. Права: в любое время вы можете ограничить, восстановить и удалить свою информацию.

  1.   Фабиан сказал

    Большое спасибо за учебник, очень интересный для тех из нас, кто хочет начать с чего-то простого. Мне нужна дополнительная помощь в части создания таблиц данных. С уважением

  2.   нюансированный сказал

    Очень хорошо! Хорошо объяснено и подробно. Спасибо за данные. (и)

  3.   ро сказал

    Спасибо чувак! Очень интересно как первое.
    Было бы хорошо увидеть различные дополнительные экземпляры, комментарии типа (всплывающие окна) или меню (введите те из панелей, которые появляются в elementary или gnome-shell) ...
    Правда очень хорошо.
    Читаем: =)