Введение:
Итак, у нас есть пост, следующий за первая частьВ этом мы собираемся сосредоточиться на обработке данных (вопросов), и мы начнем с логической части игры, в следующем мы закончим логику и реализуем время и 3 варианта.
База данных:
Для базы данных мы будем использовать 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.
Давайте перейдем к нашему приложению и создадим нашу базу данных, как мы видели, мы определяем базу данных:
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)}
Посмотрим, как получилось:
Я следую инструкциям, и все работает. Чтобы сотрудничать, я говорю, что:
* Не меняет стоимость попаданий и промахов. Вы должны добавить это к каждой кнопке в событии щелчка.
* И это в строке:
if (Logic.acerto (число, 1)) {
измените 1 на номер кнопки / ответа.
lolbimbo, я нахожу ваш вклад интересным. Надеюсь новые туто !!!
Спасибо за обмен.
Мне нравится, что вы прокомментировали эти моменты, потому что я не разъяснил в посте, более того, я не помню баллов, успехов и неудач, если вы посмотрите на это, вы увидите, что когда мы нажимаем кнопку, мы добавляем баллы к успехам ... но они не отражаются в метке, поэтому мы должны поместить его в его свойство text, чтобы отобразить точки:
Метка {
id: неудачи
текст: «Неисправности:» + nсбой
красный цвет"
}
Метка {
id: хиты
текст: «Просмотров:» + родился
}
Метка {
id: очки
текст: «Баллы:» + n баллов
fontSize: "средний"
}
Я также проясню это в части 3.