Во второй части мы построим логику работы приложения (чтобы увидеть и проанализировать код, лучше взглянуть на него полностью, я помещу его под постом), но перед этим нам нужно будет установить библиотеки 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 ());
}
Если у нас он еще не создан (при первом запуске кода), он создаст себя.
Создайте таблицу и вставьте вопросы:
частная пустота 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, мы даем ответ как неправильный:
Компилировать (добавляем –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);
Полный код: http://paste.desdelinux.net/4882
Большое спасибо за учебник, очень интересный для тех из нас, кто хочет начать с чего-то простого. Мне нужна дополнительная помощь в части создания таблиц данных. С уважением
Очень хорошо! Хорошо объяснено и подробно. Спасибо за данные. (и)
Спасибо чувак! Очень интересно как первое.
Было бы хорошо увидеть различные дополнительные экземпляры, комментарии типа (всплывающие окна) или меню (введите те из панелей, которые появляются в elementary или gnome-shell) ...
Правда очень хорошо.
Читаем: =)