Membuat aplikasi untuk Ubuntu Touch [QML] - [Part 2]

Pendahuluan:

Nah di sini kami memiliki posting yang mengikuti bagian satuDalam hal ini kita akan fokus pada penanganan data (pertanyaan), dan kita akan mulai dengan bagian logika permainan, selanjutnya kita akan menyelesaikan logika dan mengimplementasikan waktu dan 3 opsi.

Anda dapat menemukan kode di repositori Launchpad saya (klik disini), yang akan saya perbarui saat melakukannya.

Database:

Untuk database yang akan kita gunakan u1db, yaitu database yang menyimpan data dalam format JSON.

Pertama-tama mari kita lihat data apa yang harus kita simpan, kita memiliki 1 pertanyaan (selain teks pertanyaan alangkah baiknya memiliki pengenal), dengan 4 kemungkinan jawaban, yang hanya 1 yang bisa, oleh karena itu dokumen di JSON pertanyaan tunggal harus:

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

Seperti yang kita lihat, kita telah terstruktur dalam format JSON di mana kita memiliki pengenal, string dengan pertanyaan dan r1, r2 yang mewakili jawaban 1 dan jawaban 2, akhirnya kita memiliki jawaban mana yang benar.

Mari kita lihat sedikit cara kerja U1db, hal pertama yang harus kita lakukan untuk menggunakan U1db adalah mengimpor modul:

import U1db 1.0 as U1db

Kami mendeklarasikan database:

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

Database akan disimpan sebagai aU1DbDatabase.u1db, sekarang kita membuat dokumen:

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

Dimana kita dapat melihat format {«halo»: «sesuatu»}, untuk mengeksekusi query, baik untuk menambah data, mendapatkan data, menghapusnya, dll. Kami memiliki elemen U1db.Query.

Kami dapat menemukan tutorial di situs web pengembangan Ubuntu.

Mari pergi ke aplikasi kita dan buat database kita, seperti yang telah kita lihat, kita mendefinisikan database:

U1db.Database {id: pertanyaan db; jalur: "questiondb.u1db"}

Oke, sekarang mari kita letakkan beberapa elemen default di dokumen database questiondb:

    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"}
                    ] }
    }

Saya sadar bahwa kode tidak ditampilkan sebagaimana mestinya, tetapi jika kita melihat kita akan melihat bahwa kita memiliki elemen pertanyaan, yang dengan »[]» kita menetapkan bahwa mungkin ada beberapa elemen (bukan statis); dalam hal ini kita akan mempunyai 4 secara default, 4 pertanyaan dengan jawabannya masing-masing.

Untuk mendapatkan elemen dokumen JSON, kita dapat menentukan pengenal dari dokumen yang telah kita buat (yaitu sebuah dokumen). Mari kita bayangkan bahwa kita ingin mendapatkan teks dari pertanyaan pertama:

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.

Memprogram logika permainan

Nah, sekarang kita tahu bagaimana menangani sedikit database tempat kita menyimpan pertanyaan, kita akan memprogram logika permainan. Pertama-tama kita akan membuat file JavaScript (.js): Tambahkan baru -> Qt -> File Js. Saya akan menelepon dia logic.js.

Di dalam file kita akan membuat beberapa fungsi, untuk mengimpor file js ke dalam dokumen qml kita:

impor "logica.js" sebagai Logica

Kami mengasosiasikan nama Logica, oleh karena itu ketika kami ingin memanggil suatu fungsi kami akan melakukannya sebagai Logica.funcion (), seolah-olah itu adalah objek yang memiliki metodenya.

Untuk saat ini, agar postingan tidak menjadi terlalu lama, kita akan meninggalkan waktu pertanyaan dan pilihan untuk nanti, kita akan berkonsentrasi pada pertanyaan dan poin, mari kita lihat fungsi yang akan kita gunakan untuk melanjutkan dari pertanyaan:

function nextQuestion (num) {// waktu = 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; }

Seperti yang bisa kita lihat, kita meneruskan nomor pertanyaan di mana kita berada sebagai argumen dan dari sini meletakkan jawaban ke tombol dan label pertanyaan. Mari kita lihat sekarang untuk memvalidasi apakah jawaban yang dipilih benar:

function hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; jika (opsi == correct_num) hit = true; serangan balik; }

Kode tersebut berbicara sendiri, jika opsi yang dipilih sama dengan yang disediakan oleh database, maka itu akan benar, jika tidak maka tidak akan benar. Sekarang setelah fungsi-fungsi ini ditentukan, kami akan menerapkannya dalam kode qml kami.

Pertama-tama kita akan menambahkan variabel yang akan mengontrol pertanyaan mana yang kita masuki, kita akan menyebutnya num; Kami juga akan memiliki tiga variabel lagi: hit, miss, dan points.

    properti int num: 0 properti int nfaults: 0 properti int lahir: 0 properti int npoints: 0

Awalnya semuanya 0.

Sekarang kita menambahkan onClick ke semua tombol jawab. onClick, seperti namanya, adalah peristiwa yang akan terjadi ketika tombol itu diklik:

            Tombol {id: resp1 text: "Respon 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextPregunta (num) npoints = npoints + 50 births = births + 1} else {nfaults = nfaults + 1}}}

Kami melihat bahwa dengan mengklik tombol, ia memeriksa apakah itu benar atau tidak, jika itu benar, tambahkan poin dan ajukan pertanyaan, jika tidak, satu kehidupan tersisa.

Akhirnya kita akan membuat pertanyaan pertama dimuat saat komponen Halaman dimuat:

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

Mari kita lihat bagaimana hasilnya:

uji


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Gabiel dijo

    Saya mengikuti langkah-langkahnya dan semuanya bekerja. Hanya untuk berkolaborasi, saya katakan bahwa:
    * Tidak mengubah nilai hits and miss. Anda harus menambahkannya ke setiap tombol di acara klik Anda.
    * Dan yang sejalan:
    if (Logic.acerto (num, 1)) {
    ubah 1 menjadi angka tombol / jawaban.

    lolbimbo, menurut saya kontribusi Anda menarik. Saya berharap tuto baru !!!

    Terima kasih untuk berbagi.

    1.    lobimbo dijo

      Saya suka Anda mengomentari poin-poin ini karena saya tidak menjelaskannya di posting, terlebih lagi, saya tidak ingat poin, keberhasilan dan kegagalan, jika Anda melihatnya Anda akan melihat bahwa ketika kita mengklik tombol, kami menambahkan poin keberhasilan ... tetapi tidak tercermin dalam Label, itulah mengapa kami harus meletakkannya di properti teksnya untuk menunjukkan poin:

      Label {
      id: kegagalan
      teks: «Kesalahan:» + nfaults
      warna merah"
      }

      Label {
      id: hits
      teks: «Hits:» + lahir
      }

      Label {
      id: poin
      teks: «Poin:» + npoints
      fontSize: "medium"
      }

      Saya juga akan menjelaskannya di bagian 3.