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.
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.
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:
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.
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.