Создание приложения для Ubuntu Touch [QML] - [Часть 2]

Введение:

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

Вы можете найти код в моем репозитории Launchpad (Clic aquí), где буду обновлять по ходу.

База данных:

Для базы данных мы будем использовать U1 дБ, которая представляет собой базу данных, сохраняющую данные в формате JSON.

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

{ "id": 1, "question": "будет dev.desdelinux.net", "ответы" : { r1: "да", r2: "нет", r3: "не знаю", r4: "это неправильный ответ" }, "правильно": 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.

Мы можем найти учебник на сайте разработки Ubuntu.

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

U1db.Database {id: db questions; путь: "questionsdb.u1db"}

Хорошо, теперь давайте поместим некоторые элементы по умолчанию в документ базы данных questionsdb:

    U1db.Document { id: база данных aDocument: questionsdb docId: 'questions' create: true defaults: { "questions": [ {"question":"Там будет dev.desdelinux.net ?", "r1":"да", "r2":"нет", "r3":"нос", "r4":"неверный ответ", "правильный": "3" }, {"вопрос ":"Кто такой Хагрид (Гарри Поттер)?", "r1":"Заместитель директора школы", "r2":"Егерь", "r3":"Учитель трансформации", "r4": " Префект", "correct": "2"}, {"question":"Какая столица Исландии?", "r1":"Амстердам", "r2":"Рейкьявик", "r3":" Тбилиси", "r4":"Алматы", "correct": "2"} ] } }

Я знаю, что код отображается не так, как должен, но если присмотреться, то увидим, что у нас есть элемент вопросы, который с помощью »[]» указывает, что элементов может быть несколько (они не статичны); в этом случае у нас будет 4 по умолчанию, 4 вопроса с соответствующими ответами.

Чтобы получить элементы документа JSON, мы можем указать идентификатор созданного нами документа (который документ). Представим, что мы хотим получить текст первого вопроса:

aDocument.contents.questions [0] .question

Эта строка кода возвращает содержание вопроса документа aDocument элемента 0 (первого в индексе), а именно: «Там будет dev.desdelinux.сеть?" Если мы поставим в индекс цифру 1, то это второй вопрос.

Программирование игровой логики

Что ж, теперь, когда мы знаем, как работать с базой данных, в которой у нас есть немного сохраненных вопросов, мы собираемся запрограммировать логику игры. Прежде всего создадим файл JavaScript (.js): Добавить новый -> Qt -> Js File. я позвоню ему logic.js.

В этом файле мы собираемся создать несколько функций, чтобы импортировать файл js в наш документ qml:

импортировать "logica.js" как Logica

Мы связываем имя Logica, поэтому, когда мы хотим вызвать функцию, мы будем делать это как Logica.function (), как если бы это был объект, у которого есть свои методы.

А пока, чтобы пост не стал слишком длинным, мы оставим время вопроса и варианты на потом, мы сконцентрируемся на вопросах и пунктах, давайте посмотрим на функцию, которую мы будем использовать для перехода от вопрос:

function nextQuestion (число) {// время = 0 question.text = aDocument.contents.questions [число] .question; resp1.text = aDocument.contents.questions [число] .r1; resp2.text = aDocument.contents.questions [число] .r2; resp3.text = aDocument.contents.questions [число] .r3; resp4.text = aDocument.contents.questions [число] .r4; }

Как мы видим, мы передаем номер вопроса там, где мы находимся, в качестве аргумента, и отсюда он помещает ответы на кнопки и метку вопроса. Давайте посмотрим, чтобы проверить правильность выбранного ответа:

функция hit (число, опция) {var hit = false; var num_correcto = aDocument.contents.questions [число] .correct; если (опция == правильное_число) попадание = истина; ответный удар; }

Код говорит сам за себя, если выбранный вариант совпадает с вариантом, предоставленным базой данных, тогда он будет истинным, иначе - нет. Теперь, когда у нас есть эти функции, мы применим их в нашем qml-коде.

Прежде всего мы добавим переменную, которая будет контролировать, в каком вопросе мы находимся, мы назовем ее num; У нас также будет еще три переменных: попадания, промахи и баллы.

    свойство int num: 0 свойство int nfaults: 0 свойство int рождение: 0 свойство int n точек: 0

Изначально все они равны 0.

Теперь мы добавляем onClick ко всем кнопкам ответа. onClick, как следует из названия, - это событие, которое произойдет при нажатии этой кнопки:

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

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

Наконец, мы загрузим первый вопрос, когда загрузится компонент Page:

    Страница {id: pageGame Component.onCompleted: {Logic.nextPregunta (0)}

Посмотрим, как получилось:

тестXNUMX


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

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

*

*

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

  1.   Габиелус сказал

    Я следую инструкциям, и все работает. Чтобы сотрудничать, я говорю, что:
    * Не меняет стоимость попаданий и промахов. Вы должны добавить это к каждой кнопке в событии щелчка.
    * И это в строке:
    if (Logic.acerto (число, 1)) {
    измените 1 на номер кнопки / ответа.

    lolbimbo, я нахожу ваш вклад интересным. Надеюсь новые туто !!!

    Спасибо за обмен.

    1.    лолбимбо сказал

      Мне нравится, что вы прокомментировали эти моменты, потому что я не разъяснил в посте, более того, я не помню баллов, успехов и неудач, если вы посмотрите на это, вы увидите, что когда мы нажимаем кнопку, мы добавляем баллы к успехам ... но они не отражаются в метке, поэтому мы должны поместить его в его свойство text, чтобы отобразить точки:

      Метка {
      id: неудачи
      текст: «Неисправности:» + nсбой
      красный цвет"
      }

      Метка {
      id: хиты
      текст: «Просмотров:» + родился
      }

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

      Я также проясню это в части 3.