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

Pengenalan:

Baiklah di sini kita mempunyai siaran yang mengikuti bahagian pertamaDalam yang satu ini kita akan fokus pada pengendalian data (pertanyaan), dan kita akan mulai dengan bahagian logik permainan, yang berikutnya kita akan menyelesaikan logik dan menerapkan waktu dan 3 pilihan.

Anda boleh mendapatkan kod di repositori Launchpad saya (klik di sini), di mana saya akan mengemas kini semasa saya pergi.

Pangkalan data:

Untuk pangkalan data yang akan kami gunakan u1db, yang merupakan pangkalan data yang menyimpan data dalam format JSON.

Pertama-tama mari kita lihat data apa yang harus kita simpan, kita mempunyai 1 soalan (selain dari teks soalan itu bagus untuk mempunyai pengecam), dengan 4 kemungkinan jawapan, yang hanya 1 dapat, oleh itu dokumen di JSON satu soalan mestilah:

{ "id": 1, "question": " akan ada dev.desdelinux.net ", "jawapan" : { r1: "ya", r2: "tidak", r3: "tidak tahu", r4: "ini jawapan palsu" }, "betul": 3 }

Seperti yang kita lihat, kita mempunyai struktur dalam format JSON di mana kita mempunyai pengecam, rentetan dengan soalan dan r1, r2 yang mewakili jawapan 1 dan jawapan 2, akhirnya kita mempunyai jawapan mana yang betul.

Mari kita lihat sedikit bagaimana U1db berfungsi, perkara pertama yang harus kita lakukan untuk menggunakan U1db adalah mengimport modul:

import U1db 1.0 as U1db

Kami menyatakan pangkalan data:

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

Pangkalan data akan disimpan sebagai aU1DbDatabase.u1db, sekarang kami membuat dokumen:

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

Di mana kita dapat melihat format {«hello»: «sesuatu»}, untuk melaksanakan pertanyaan, baik untuk menambah data, memperoleh data, menghapusnya dll. Kami mempunyai elemen U1db.Query.

Kita dapat mencari a tutorial di laman web pembangunan Ubuntu.

Mari pergi ke aplikasi kami dan buat pangkalan data kami, seperti yang telah kita lihat, kita menentukan pangkalan data:

U1db.Dabase {id: questiondb; jalan: "questiondb.u1db"}

Baiklah, sekarang mari kita masukkan beberapa elemen lalai dalam dokumen dokumen pangkalan data

    U1db.Document { id: aDocument database: questionsdb docId: 'questions' create: true defaults: { "questions": [ {"question":"Akan ada dev.desdelinux.net ?", "r1":"ya", "r2":"tidak", "r3":"hidung", "r4":"jawapan salah", "betul": "3" }, {"soalan ":"Siapa Hagrid (Harry Potter)?", "r1":"Naib pengetua sekolah", "r2":"Penjaga permainan", "r3":"Guru transformasi", "r4":" Pengawas", "betul": "2"}, {"soalan":"Apakah ibu negara Iceland?", "r1":"Amsterdam", "r2":"Reykjavik", "r3":" Tbilisi ", "r4":"Almaty", "betul": "2"} ] } }

Saya sedar bahawa kod tersebut tidak dipaparkan sebagaimana mestinya, tetapi jika kita melihat, kita akan melihat bahawa kita mempunyai unsur soalan, yang dengan »[]» kita tentukan bahawa boleh ada beberapa elemen (mereka tidak statik); dalam kes ini kita akan mempunyai 4 secara lalai, 4 soalan dengan jawapan masing-masing.

Untuk mendapatkan elemen dokumen JSON, kita dapat menentukan pengenal dokumen yang telah kita buat (yang mana aDokumen). Mari kita bayangkan bahawa kita ingin mendapatkan teks soalan pertama:

aDocument.contents.questions [0] .pertanyaan

Baris kod ini mengembalikan kepada kami kandungan soalan dokumen aDocument, elemen 0 (yang pertama dalam indeks), iaitu: «Akan ada dev.desdelinux.net?” Jika kita meletakkan nombor 1 dalam indeks, maka ia adalah soalan kedua.

Memprogram logik permainan

Nah, sekarang kita tahu bagaimana menangani pangkalan data di mana kita telah menyimpan soalan, kita akan memprogramkan logik permainan. Pertama sekali kita akan membuat fail JavaScript (.js): Tambah baru -> Qt -> Fail Js. Saya akan memanggilnya logik.js.

Dalam fail kita akan membuat beberapa fungsi, untuk mengimport file js ke dalam dokumen qml kami:

import "logica.js" sebagai Logica

Kami mengaitkan nama Logica, oleh itu apabila kami ingin memanggil fungsi, kami akan melakukannya sebagai Logica.funcion (), seolah-olah ia adalah objek yang mempunyai kaedahnya.

Buat masa ini, agar catatan tidak menjadi terlalu panjang, kami akan meninggalkan masa soalan dan pilihan untuk kemudian, kami akan menumpukan perhatian pada persoalan dan intinya, mari kita lihat fungsi yang akan kita gunakan untuk beralih dari soalan:

fungsi 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; }

Seperti yang dapat kita lihat, kita memberikan nombor soalan di mana kita berada sebagai argumen dan dari sini ia meletakkan jawapan pada butang dan label soalan. Mari lihat sekarang untuk mengesahkan jika jawapan yang dipilih betul:

hit fungsi (num, pilihan) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; jika (pilihan == correct_num) tekan = benar; hit balik; }

Kod itu bercakap untuk dirinya sendiri, sekiranya pilihan yang dipilih sama dengan yang diberikan oleh pangkalan data, maka itu akan benar, jika tidak. Setelah fungsi ini ditentukan, kami akan menerapkannya dalam kod qml kami.

Mula-mula kita akan menambahkan pemboleh ubah yang akan menjadi satu yang mengawal soalan mana kita berada, kita akan memanggilnya num; Kami juga akan mempunyai tiga lagi pemboleh ubah: hits, miss dan point.

    bilangan harta tanah: 0 harta tanah harta tanah: 0 harta tanah kelahiran: 0 titik inti harta tanah: 0

Pada mulanya mereka semua berada di 0.

Sekarang kita menambah onClick ke semua butang jawapan. onClick, seperti namanya, adalah peristiwa yang akan berlaku apabila butang diklik:

            Butang {id: resp1 text: "Response 1" anchors.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onKlik: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 kelahiran = kelahiran + 1} yang lain {nfaults = nfaults + 1}}}

Kami melihat bahawa apabila anda mengklik butang, ia memeriksa sama ada betul atau tidak, jika ya, tambahkan poin dan lulus soalan, jika tidak, masih ada satu hayat.

Akhirnya kami akan memuatkan soalan pertama apabila komponen Halaman dimuat:

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

Mari lihat bagaimana ternyata:

ujian


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   gabielus kata

    Saya mengikuti langkah dan semuanya berjalan lancar. Hanya untuk berkolaborasi saya katakan bahawa:
    * Tidak mengubah nilai hits dan miss. Anda mesti menambahkannya ke setiap butang dalam acara klik anda.
    * Dan yang sesuai:
    jika (Logik.acerto (bilangan, 1)) {
    anda mesti menukar 1 untuk butang / nombor jawapan.

    lolbimbo, saya dapati sumbangan anda menarik. Saya harap tuto baru !!!

    Terima kasih kerana sudi berkongsi.

    1.    Lolbimbo kata

      Saya suka bahawa anda telah memberi komen mengenai perkara ini kerana saya tidak menjelaskannya dalam catatan, apa lagi, saya tidak ingat poin, kejayaan dan kegagalan, jika anda melihatnya, anda akan melihat bahawa apabila kami menekan butang, kita menambah poin kejayaan ... tetapi tidak tertera di Label, sebab itulah kita harus memasukkannya ke dalam sifat teksnya untuk menunjukkan perkara:

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

      Label {
      id: hits
      teks: «Hit:» + dilahirkan
      }

      Label {
      id: mata
      teks: «Mata:» + titik
      fontSize: "sederhana"
      }

      Saya juga akan menjelaskannya di bahagian 3.