Ubuntu Touch 용 앱 만들기 [QML]-[Part 2]

소개 :

여기에 다음 게시물이 있습니다. 첫 부분여기서는 데이터 (질문) 처리에 중점을두고 게임의 논리 부분부터 시작하고 다음 단계에서는 논리를 완료하고 시간과 3 가지 옵션을 구현합니다.

내 Launchpad 저장소에서 코드를 찾을 수 있습니다 (여기를 클릭하십시오), 어디로 가면 업데이트하겠습니다.

데이터 베이스:

데이터베이스의 경우 u1db, 데이터를 형식으로 저장하는 데이터베이스 JSON.

먼저 어떤 데이터를 저장해야하는지 살펴 보겠습니다. 1 개의 질문 (질문 텍스트를 제외하고 식별자가 있으면 좋을 것입니다), 4 개의 가능한 답변 중 1 개만 가능하므로 문서 JSON 단일 질문은 다음과 같아야합니다.

{ "id": 1, "question": " 개발자가 있을 것입니다.desdelinux.net ", "답변" : { r1: "예", r2: "아니오", r3: "모름", r4: "이것은 잘못된 답변입니다." }, "올바른": 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 : db 질문; 경로 : "questionsdb.u1db"}

이제 데이터베이스 문서 questionsdb에 몇 가지 기본 요소를 입력 해 보겠습니다.

    U1db.Document { id: aDocument 데이터베이스: questionsdb docId: 'questions' create: true 기본값: { "questions": [ {"question":"개발자가 있을 것입니다.desdelinux.net ?", "r1":"예", "r2":"아니요", "r3":"코", "r4":"거짓 대답", "올바른": "3" }, {"질문 ":"해그리드(해리포터)는 누구입니까?", "r1":"학교 교감", "r2":"사냥꾼", "r3":"변신 교사", "r4":" A prefect", "올바른": "2"}, {"question":"아이슬란드의 수도는 무엇입니까?", "r1":"암스테르담", "r2":"레이캬비크", "r3":" 트빌리시 ", "r4":"알마티", "올바른": "2"} ] } }

코드가 제대로 표시되지 않는다는 것을 알고 있지만 자세히 살펴보면 요소가 있음을 알 수 있습니다. 질문이나 건의 사항,»[]»를 사용하여 여러 (정적이지 않은) 요소가있을 수 있음을 지정합니다. 이 경우 기본적으로 4 개의 질문과 각각의 답변이있는 4 개의 질문이 있습니다.

문서 요소를 가져 오려면 JSON, 우리가 생성 한 문서의 식별자 (즉, 문서). 첫 번째 질문의 텍스트를 얻고 싶다고 가정 해 봅시다.

aDocument.contents.questions [0] .question

이 코드 줄은 요소 0(인덱스의 첫 번째)에 있는 문서 aDocument의 질문 내용을 반환합니다.desdelinux.그물?" 색인에 숫자 1을 넣으면 두 번째 질문입니다.

게임 로직 프로그래밍

이제 질문을 저장 한 데이터베이스를 처리하는 방법을 알았으므로 게임 논리를 프로그래밍 할 것입니다. 먼저 파일을 생성합니다. 자바 스크립트 (.js) : 새로 추가-> Qt-> Js 파일. 나는 그를 부를 것이다 logic.js.

파일에서 js 파일을 qml 문서로 가져 오는 여러 함수를 만들 것입니다.

Logica로 "logica.js"가져 오기

Logica라는 이름을 연결하므로 함수를 호출 할 때 메서드가있는 객체 인 것처럼 Logica.function ()으로 수행합니다.

지금은 게시물이 너무 길어지지 않도록 질문의 시간과 옵션은 나중을 남겨두고 질문과 요점에 집중할 것입니다. 질문:

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

보시다시피, 우리는 우리가 있는 곳의 질문 번호를 인수로 전달하고 여기에서 버튼과 질문 레이블에 대한 답변을 넣습니다. 선택한 답변이 올바른지 확인하기 위해 지금 봅시다.

function hit (num, option) {var hit = false; var num_correcto = aDocument.contents.questions [num] .correct; if (option == correct_num) hit = true; 리턴 히트; }

선택한 옵션이 데이터베이스에서 제공하는 옵션과 동일한 경우 코드는 그 자체로 말하고, 그렇지 않으면 그렇지 않을 것입니다. 이제 이러한 함수를 정의 했으므로 qml 코드에 적용합니다.

먼저 우리가 어떤 질문에 있는지 제어하는 ​​변수를 추가 할 것입니다. 우리는 그것을 num이라고 부를 것입니다. 또한 히트, 미스 및 포인트의 세 가지 변수가 더 있습니다.

    property int num : 0 property int nfaults : 0 property int 출생 : 0 property int npoints : 0

처음에는 모두 0입니다.

이제 모든 응답 버튼에 onClick을 추가합니다. onClick은 이름에서 알 수 있듯이 해당 버튼을 클릭할 때 발생하는 이벤트입니다.

            버튼 {id : resp1 text : "Response 1"anchors.horizontalCenter : parent.horizontalCenter width : parent.width-20 onClicked : {if (Logic.certain (num, 1)) {num = num + 1; Logic.nextPregunta (num) npoints = npoints + 50 출생 = 출생 + 1} else {nfaults = nfaults + 1}}}

우리는 버튼을 클릭함으로써 그것이 맞는지 아닌지를 확인하고, 그것이 맞다면 점수를 더하고 질문을 통과하고, 그렇지 않으면 하나의 생명이 남는 것을 볼 수 있습니다.

마지막으로 페이지 구성 요소가로드 될 때 첫 번째 질문을로드합니다.

    페이지 {id : pageGame Component.onCompleted : {Logic.nextPregunta (0)}

어떻게되었는지 살펴 보겠습니다.

test


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.

  1.   가비 엘 루스

    나는 단계를 따르고 모든 것이 작동합니다. 협력하기 위해 다음과 같이 말합니다.
    * 히트와 미스의 값을 변경하지 않습니다. 클릭 이벤트의 각 버튼에 추가해야합니다.
    * 그리고 그 라인 :
    if (Logic.acerto (num, 1)) {
    버튼 / 답변의 번호 1을 변경해야합니다.

    lolbimbo, 나는 당신의 기여가 흥미 롭다고 생각합니다. 나는 새로운 tutos를 바랍니다!

    공유를위한 감사합니다.

    1.    Lolbimbo

      글에서 명확하게 설명하지 않았기 때문에이 점에 대해 언급 한 것이 마음에 듭니다. 게다가 요점, 성공 및 실패를 기억하지 못합니다. 보시면 버튼을 클릭하면 알 수 있습니다. 성공에 포인트를 추가하지만 라벨에는 반영되지 않으므로 포인트를 표시하려면 텍스트 속성에 입력해야합니다.

      라벨 {
      id : 실패
      텍스트 :«결함 :»+ nfaults
      색상 : "빨간색"
      }

      라벨 {
      id : 조회수
      텍스트 :«조회수 :»+ 출생
      }

      라벨 {
      id : 포인트
      텍스트 :«포인트 :»+ n 포인트
      fontSize : "중간"
      }

      3 부에서도 설명하겠습니다.