Створення програми для Ubuntu Touch [QML] - [Частина 2]

Введення:

Ну ось у нас є пост, який слідує за перша частинаУ цьому ми зосередимося на обробці даних (запитань), і ми почнемо з логічної частини гри, в наступному закінчимо логіку та реалізуємо час та 3 варіанти.

Ви можете знайти код у моєму сховищі Launchpad (натисніть тут), де я буду оновлювати його по ходу.

База даних:

Для бази даних ми будемо використовувати u1db, що є базою даних, яка зберігає дані у форматі JSON.

Перш за все давайте подивимось, які дані нам слід зберегти, у нас є 1 запитання (крім тексту запитання було б непогано мати ідентифікатор), з 4 можливими відповідями, з яких може бути лише 1, тому документ у JSON єдине питання має бути:

{
"id": 1,
"pregunta": " habra dev.desdelinux.net ",
"respuestas" : { r1: "si" , r2: "no" , r3: "no se sabe" ,  r4: "esto es una respuesta falsa" },
"correcta": 3
}

Як ми бачимо, ми структуровані у форматі JSON де ми маємо ідентифікатор, рядок із запитанням та r1, r2, які представляють відповідь 1 та відповідь 2, нарешті ми маємо, яка з відповідей є правильною.

Давайте трохи подивимося, як працює U1db, перше, що нам потрібно зробити, щоб використовувати U1db - це імпортувати модуль:

import U1db 1.0 as U1db

Ми оголошуємо базу даних:

U1db.Database {
id: aDatabase
path: "aU1DbDatabase"
}

Бази даних будуть збережені як aU1DbDatabase.u1db, тепер ми створюємо документ:

U1db.Document {
id: aDocument
database: aDatabase
docId: 'helloworld'
create: true
defaults: { "hello": "Hello World!" }
}

Де ми можемо побачити формат {«привіт»: «щось»}, для виконання запитів або для додавання даних, отримання даних, їх видалення тощо. У нас є елемент U1db.Query.

Ми можемо знайти a підручник на веб-сайті розробника Ubuntu.

Давайте перейдемо до нашого додатку і створимо нашу базу даних, як ми вже бачили, ми визначаємо базу даних:

U1db.Database {id: questionsdb; шлях: "questionsdb.u1db"}

Добре, тепер давайте помістимо деякі елементи за замовчуванням у документ бази даних questionsdb:

    U1db.Document {
        id: aDocument
        database: preguntasdb
        docId: 'preguntas'
        create: true
        defaults: { "preguntas":
                    [
                        {"pregunta":"Habra dev.desdelinux.net ?", 
                        "r1":"si", "r2":"no", "r3":"nose", 
                        "r4":"respuesta falsa", "correcta": "3" },
                        {"pregunta":"Quien es hagrid (harry potter) ?", 
                        "r1":"El vicedirector de la escuela", 
                        "r2":"El guardabosques", 
                        "r3":"El profesor de transformaciones", 
                        "r4":"Un prefecto", 
                        "correcta": "2"},
                        {"pregunta":"¿Cúal es la capital de Islandia?", 
                       "r1":"Amsterdam",
                       "r2":"Reykjavik", 
                       "r3":"Tiflis", 
                       "r4":"Almaty",
                       "correcta": "2"}
                    ] }
    }

Мені відомо, що код відображається не так, як слід, але якщо ми подивимось, то побачимо, що у нас є елемент preguntas, що за допомогою «[]» ми вказуємо, що може бути декілька (вони не є статичними) елементів; у цьому випадку ми матимемо 4 за замовчуванням, 4 запитання з відповідними відповідями.

Отримати елементи документа JSON, ми можемо вказати ідентифікатор створеного нами документа (який є aДокумент). Уявімо, що ми хочемо отримати текст першого запитання:

aDocument.contents.questions [0] .question

Esta línea de código nos retorna el contenido de pregunta del documento aDocument, del elemento 0 (el primero del índice), que es: «Habra dev.desdelinux.net?». Si ponemos en el índice el número 1, entonces seáa la segunda pregunta.

Програмування ігрової логіки

Ну, тепер, коли ми знаємо, як обробляти базу даних, де ми зберегли запитання, ми збираємося запрограмувати логічну гру. Перш за все ми створимо файл JavaScript (.js): Додати новий -> Qt -> Js-файл. Я зателефоную йому logic.js.

У файлі ми збираємося створити кілька функцій для імпорту js-файлу в наш qml-документ:

імпортувати "logica.js" як Logica

Ми пов'язуємо ім'я Logica, тому, коли ми хочемо викликати функцію, ми будемо робити це як Logica.funcion (), ніби це об'єкт, який має свої методи.

Наразі, щоб пост не став занадто довгим, ми залишимо час запитання та варіанти на потім, зосередимося на питаннях і пунктах, давайте побачимо функцію, яку ми використаємо для переходу від питання:

функція nextQuestion (num) {// time = 0 question.text = aDocument.contents.questions [num] .question; resp1.text = aDocument.contents.questions [num] .r1; resp2.text = aDocument.contents.questions [num] .r2; resp3.text = aDocument.contents.questions [num] .r3; resp4.text = aDocument.contents.questions [num] .r4; }

Як бачимо, ми передаємо номер запитання там, де ми знаходимося в якості аргументу, і звідси він поміщає відповіді на кнопки та мітку запитання. Подивимось зараз, щоб перевірити, чи правильно вибрана відповідь:

потрапляння функції (num, параметр) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; якщо (опція == правильна_число) hit = true; зворотний удар; }

Код говорить сам за себе, якщо обраний варіант такий самий, як той, що наданий базою даних, то це буде правдою, інакше ні. Тепер, коли ми визначили ці функції, ми застосуємо їх у нашому коді qml.

Перш за все ми додамо змінну, яка буде контролювати, в якому питанні ми знаходимось, ми будемо називати її num; Ми також матимемо ще три змінні: попадання, пропуски та очки.

    property int num: 0 property int nfaults: 0 property int народжень: 0 property int npoints: 0

Спочатку вони знаходяться на 0.

Тепер ми додаємо onClick до всіх кнопок відповіді. onClick, як говорить його назва, - це подія, яка відбудеться при натисканні на цю кнопку:

            Кнопка {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 народжень = народжень + 1} else {nfaults = nfaults + 1}}}

Ми бачимо, що коли ви натискаєте кнопку, вона перевіряє, чи вона правильна чи ні, якщо є, додайте бали і передайте питання, інакше залишається одне життя.

Нарешті, ми виконаємо перше запитання, коли завантажується компонент Page:

    Сторінка {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Подивимось, як це вийшло:

тест


Залиште свій коментар

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

*

*

  1. Відповідальний за дані: Мігель Анхель Гатон
  2. Призначення даних: Контроль спаму, управління коментарями.
  3. Легітимація: Ваша згода
  4. Передача даних: Дані не передаватимуться третім особам, за винятком юридичних зобов’язань.
  5. Зберігання даних: База даних, розміщена в мережі Occentus Networks (ЄС)
  6. Права: Ви можете будь-коли обмежити, відновити та видалити свою інформацію.

  1.   Габілеус - сказав він

    Я слідую крокам і все працює. Просто для співпраці я кажу, що:
    * Не змінює значення ударів і промахів. Ви повинні додати це до кожної кнопки у вашій події кліку.
    * І це в рядку:
    if (Logic.acerto (num, 1)) {
    вам потрібно змінити 1 на номер кнопки / відповіді.

    lolbimbo, я вважаю твій внесок цікавим. Я сподіваюся, нові уроки !!!

    Дякую, що поділились.

    1.    лолбімбо - сказав він

      Мені подобається, що ви прокоментували ці моменти, тому що я не пояснив у дописі, більше того, я не пам’ятаю пункти, успіхи та невдачі, якщо ви подивитесь на це, то побачите, що коли ми натиснемо кнопку, ми додаємо точки, успіхи ... але вони не відображаються в ярлику, тому ми повинні помістити його у властивість text, щоб показати точки:

      Етикетка {
      id: невдачі
      текст: «Несправності:» + n помилки
      колір: "червоний"
      }

      Етикетка {
      id: хіти
      текст: «Хіти:» + нар
      }

      Етикетка {
      id: бали
      текст: «Бали:» + nбалів
      fontSize: "середній"
      }

      Я також уточню це в частині 3.