为Ubuntu Touch [QML]创建应用-[第2部分]

简介:

好吧,我们在此之后 第一部分在这一节中,我们将重点放在处理数据(问题)上,我们将从游戏的逻辑部分开始,在下一篇中,我们将完成逻辑并实现时间和3个选项。

您可以在我的Launchpad存储库中找到代码(请点击这里),我将在此进行更新。

数据库:

对于数据库,我们将使用 1分贝,这是一个以以下格式保存数据的数据库 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 在这里,我们有一个标识符,一个带有问题的字符串以及分别代表答案1和答案2的r1,r2,最后我们知道哪个答案是正确的。

让我们看一下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!" }
}

在这里我们可以看到格式{«hello»:«something»},以执行查询,或者添加数据,获取数据,删除它们等等。 我们有U1db.Query元素。

我们可以找到一个 教程 在开发网站上 Ubuntu.

让我们转到应用程序并创建数据库,正如我们所看到的,我们定义了数据库:

U1db.Database {id:数据库问题; 路径:“ 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"}
                    ] }
    }

我知道代码不会按原样显示,但是如果我们看一下,将会看到我们有一个元素 疑问,使用»[]»,我们指定可以有多个(非静态)元素; 在这种情况下,默认情况下,我们将有4个问题,以及4个问题及其相应答案。

获取文档元素 JSON,我们可以指定已创建文档的标识符(即 一份文件)。 假设我们要获取第一个问题的文本:

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文件。 我会打电话给他 逻辑.js.

在文件中,我们将创建几个函数,以将js文件导入到我们的qml文档中:

将“ logica.js”导入为Logica

我们关联了名称Logica,因此,当我们要调用函数时,将其作为Logica.funcion()进行处理,就好像它是具有其方法的对象一样。

现在,为了使发布时间不会太长,我们将保留问题的时间和选项供以后使用,我们将集中讨论问题和要点,让我们看一下我们将使用的功能来继续讨论问题:

函数nextQuestion(num){//时间= 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; }

如我们所见,我们将问题编号作为参数传递给我们,然后从此处将答案放入按钮和问题标签。 现在让我们来验证所选答案是否正确:

函数hit(num,option){var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; 如果(option == correct_num)hit = true; 回击}

如果选择的选项与数据库提供的选项相同,那么代码本身就可以说明一切,那么它将是真实的,否则就不会如此。 现在我们已经定义了这些功能,我们将在我们的qml代码中应用它们。

首先,我们将添加一个变量,该变量将控制我们所处的问题,我们将其称为num。 我们还将有三个变量:命中率,未命中率和得分。

    属性int数量:0属性inn故障:0属性int出生:0属性inn点:0

最初它们都是0。

现在,我们将onClick添加到所有答案按钮。 顾名思义,onClick是单击按钮时将发生的事件:

            按钮{id:resp1文字:“响应1” anchors.horizo​​ntalCenter:parent.horizo​​ntalCenter宽度:parent.width-20 onClicked:{if(Logic.certain(num,1)){num = num + 1; Logic.nextPregunta(num)npoints = npoints + 50出生=出生+ 1} else {nfaults = nfaults + 1}}}

我们看到,通过单击按钮,它检查是否正确,如果正确,则添加点数并通过问题,否则仍然存在生命。

最后,当Page组件加载时,我们将加载第一个问题:

    页面{id:pageGame Component.onCompleted:{Logic.nextPregunta(0)}

让我们看看结果如何:

test


发表您的评论

您的电子邮件地址将不会被发表。 必填字段标有 *

*

*

  1. 负责数据:MiguelÁngelGatón
  2. 数据用途:控制垃圾邮件,注释管理。
  3. 合法性:您的同意
  4. 数据通讯:除非有法律义务,否则不会将数据传达给第三方。
  5. 数据存储:Occentus Networks(EU)托管的数据库
  6. 权利:您可以随时限制,恢复和删除您的信息。

  1.   加比卢斯

    我按照步骤进行,一切正常。 为了合作,我说:
    *不会更改命中和未命中的值。 您必须将其添加到单击事件中的每个按钮。
    *并在该行中:
    如果(Logic.acerto(num,1)){
    将1更改为按钮/答案的编号。

    lolbimbo,我觉得您的贡献很有趣。 我希望新的短裙!

    感谢分享。

    1.    洛宾博

      我喜欢您对这些要点发表评论,因为我在帖子中没有明确说明,而且我不记得要点,成功和失败的情况,如果您查看它,您会发现当我们按下按钮时,我们会将成功添加到要点...但它们未反映在Label中,这就是为什么我们必须将其放在text属性中以显示要点:

      标签 {
      id:失败
      文字:«故障:»+ nfaults
      红色”
      }

      标签 {
      id:点击
      文字:«命中率:»+出生
      }

      标签 {
      id:点
      文字:«积分:»+ npoints
      fontSize:“中”
      }

      我还将在第3部分中对此进行澄清。