Tạo ứng dụng cho Ubuntu Touch [QML] - [Phần 2]

Introducción:

Ở đây, chúng tôi có bài đăng sau phần đầu tiênTrong phần này, chúng tôi sẽ tập trung vào việc xử lý dữ liệu (câu hỏi), và chúng tôi sẽ bắt đầu với phần logic của trò chơi, trong phần tiếp theo, chúng tôi sẽ hoàn thành phần logic và thực hiện thời gian và 3 tùy chọn.

Bạn có thể tìm thấy mã trong kho Launchpad của tôi (bấm vào đây), nơi tôi sẽ cập nhật nó khi tôi đi.

Cơ sở dữ liệu:

Đối với cơ sở dữ liệu chúng tôi sẽ sử dụng u1db, là một cơ sở dữ liệu lưu dữ liệu ở định dạng JSON.

Trước hết, hãy xem chúng ta nên lưu dữ liệu nào, chúng ta có 1 câu hỏi (ngoài nội dung của câu hỏi, sẽ rất tuyệt nếu có một số nhận dạng), với 4 câu trả lời có thể, trong đó chỉ có 1 câu trả lời, do đó tài liệu trong JSON câu hỏi duy nhất nên là:

{ "id": 1, "question": " sẽ có dev.desdelinux.net ", "answers" : { r1: "có", r2: "không", r3: "không biết", r4: "đây là câu trả lời sai" }, "đúng": 3 }

Như chúng ta thấy, chúng ta đã cấu trúc theo định dạng JSON trong đó chúng ta có một mã định danh, một chuỗi với câu hỏi và r1, r2 đại diện cho câu trả lời 1 và câu trả lời 2, cuối cùng chúng ta có câu trả lời nào trong số các câu trả lời là đúng.

Hãy xem một chút cách hoạt động của U1db, điều đầu tiên chúng ta phải làm để sử dụng U1db là nhập mô-đun:

import U1db 1.0 as U1db

Chúng tôi khai báo cơ sở dữ liệu:

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

Cơ sở dữ liệu sẽ được lưu dưới dạng aU1DbDatabase.u1db, bây giờ chúng ta tạo một tài liệu:

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

Nơi chúng ta có thể thấy định dạng {«hello»: «something»}, để thực thi các truy vấn, thêm dữ liệu, lấy dữ liệu, xóa chúng, v.v. Chúng ta có phần tử U1db.Query.

Chúng tôi có thể tìm thấy một hướng dẫn trên trang web phát triển của Ubuntu.

Hãy vào ứng dụng của chúng tôi và tạo cơ sở dữ liệu của chúng tôi, như chúng ta đã thấy, chúng tôi xác định cơ sở dữ liệu:

Câu hỏi U1db.Database {id: db; đường dẫn: "questiondb.u1db"}

Được rồi, bây giờ chúng ta hãy đặt một số phần tử mặc định trong tài liệu cơ sở dữ liệu câu hỏidb:

    U1db.Document { id: aDocument cơ sở dữ liệu: questionsdb docId: 'questions' create: true mặc định: { "questions": [ {"question">Sẽ có dev.desdelinux.net ?", "r1:"có", "r2"không", "r3":"nose", "r4":"câu trả lời sai", "đúng": "3" }, {"câu hỏi ://Hagrid (Harry Potter) là ai?", "r1": Phó hiệu trưởng của trường", "r2": Người quản trò", "r3":"Giáo viên biến hình", "r4": Tỉnh trưởng", "đúng": "2"}, {"câu hỏi:"Thủ đô của Iceland là gì?", "r1://Amsterdam", "r2://Reykjavik", "r3://Tbilisi ", "r4"Almaty", "đúng": "2"} ] } }

Tôi biết rằng mã không được hiển thị như bình thường, nhưng nếu chúng ta quan sát, chúng ta sẽ thấy rằng chúng ta có một phần tử câu hỏi, với »[]» chúng tôi chỉ định rằng có thể có một số phần tử (chúng không phải là tĩnh); trong trường hợp này, theo mặc định, chúng tôi sẽ có 4 câu hỏi với câu trả lời tương ứng.

Để lấy các phần tử tài liệu JSON, chúng tôi có thể chỉ định số nhận dạng của tài liệu chúng tôi đã tạo (đó là tài liệu). Hãy tưởng tượng rằng chúng ta muốn lấy nội dung của câu hỏi đầu tiên:

aDocument.contents.questions [0] .question

Dòng mã này trả về cho chúng ta nội dung câu hỏi của tài liệu aDocument, của phần tử 0 (phần tử đầu tiên trong chỉ mục), đó là: «Sẽ có dev.desdelinux.mạng lưới?" Nếu chúng ta đặt số 1 vào chỉ mục thì đó là câu hỏi thứ hai.

Lập trình logic trò chơi

Bây giờ chúng ta đã biết cách xử lý cơ sở dữ liệu nơi chúng ta đã lưu các câu hỏi, chúng ta sẽ lập trình logic của trò chơi. Trước hết, chúng tôi sẽ tạo một tệp JavaScript (.js): Thêm mới -> Qt -> Js File. tôi sẽ gọi cho anh ấy logic.js.

Trong tệp, chúng tôi sẽ tạo một số hàm, để nhập tệp js vào tài liệu qml của chúng tôi:

nhập "logica.js" làm Logica

Chúng tôi liên kết tên Logica, do đó khi chúng tôi muốn gọi một hàm, chúng tôi sẽ thực hiện nó là Logica.funcion (), như thể nó là một đối tượng có các phương thức của nó.

Hiện tại, để bài viết không quá dài, chúng ta sẽ để lại thời gian của câu hỏi và các lựa chọn cho phần sau, chúng ta sẽ tập trung vào câu hỏi và điểm, hãy xem một chức năng mà chúng ta sẽ sử dụng để chuyển sang câu hỏi:

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

Như chúng ta thấy, chúng ta chuyển số câu hỏi vào vị trí của chúng ta như một đối số và từ đây nó đặt câu trả lời cho các nút và nhãn câu hỏi. Hãy xem ngay bây giờ để xác thực xem câu trả lời đã chọn có đúng không:

function hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correcto; if (option == đúng_num) hit = true; đánh trả; }

Mã tự nói lên chính nó, trong trường hợp tùy chọn được chọn giống với tùy chọn được cung cấp bởi cơ sở dữ liệu, thì nó sẽ đúng, ngược lại thì không. Bây giờ chúng ta đã xác định các hàm này, chúng ta sẽ áp dụng chúng trong mã qml của mình.

Trước hết chúng ta sẽ thêm một biến sẽ kiểm soát câu hỏi mà chúng ta đang ở, chúng ta sẽ gọi nó là num; Chúng ta cũng sẽ có thêm ba biến số: số lần trúng, số trượt và điểm.

    thuộc tính int num: 0 thuộc tính int nfaults: 0 thuộc tính int sinh: 0 thuộc tính int npoints: 0

Ban đầu chúng đều bằng 0.

Bây giờ chúng tôi thêm onClick vào tất cả các nút trả lời. onClick, như tên gọi của nó, là một sự kiện sẽ xảy ra khi nút được nhấp:

            Nút {id: resp1 text: "Response 1" anchorrs.horizontalCenter: parent.horizontalCenter width: parent.width - 20 onClicked: {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextQuestion (num) npoints = npoints + 50 sinh = sinh + 1} else {nfaults = nfaults + 1}}}

Chúng ta thấy rằng bằng cách bấm vào nút, nó sẽ kiểm tra xem đúng hay không, trường hợp đúng thì cộng điểm và vượt qua câu hỏi, nếu không thì vẫn còn một mạng sống.

Cuối cùng, chúng tôi sẽ tải câu hỏi đầu tiên khi thành phần Trang tải:

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

Hãy xem nó diễn ra như thế nào:

thử nghiệm


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.

  1.   gabielus dijo

    Tôi làm theo các bước và mọi thứ hoạt động. Chỉ để cộng tác, tôi nói rằng:
    * Không thay đổi giá trị của lượt truy cập và lượt trượt. Bạn phải thêm điều đó vào mỗi nút trong sự kiện nhấp chuột của mình.
    * Và điều đó trong dòng:
    if (Logic.acerto (num, 1)) {
    bạn phải thay đổi số 1 cho nút / số câu trả lời.

    lolbimbo, tôi thấy đóng góp của bạn thú vị. Tôi hy vọng tutos mới !!!

    Cám ơn vì đã chia sẻ.

    1.    lolbimbo dijo

      Tôi thích bạn đã nhận xét về những điểm này vì tôi không nói rõ trong bài viết, hơn nữa, tôi không nhớ những điểm, thành công và thất bại, nếu bạn để ý bạn sẽ thấy rằng khi chúng tôi nhấp vào nút, chúng tôi thêm các điểm thành công ... nhưng chúng không được phản ánh trong Nhãn, đó là lý do tại sao chúng tôi phải đặt nó vào thuộc tính văn bản của nó để hiển thị các điểm:

      Nhãn {
      id: fail
      văn bản: «Lỗi:» + nfaults
      màu đỏ"
      }

      Nhãn {
      id: hits
      text: «Lượt truy cập:» + sinh
      }

      Nhãn {
      id: điểm
      text: «Điểm:» + npoints
      fontSize: "vừa"
      }

      Tôi cũng sẽ làm rõ nó trong phần 3.