File indexing completed on 2024-05-05 15:53:11

0001 /* GCompris - quiz.js
0002 *
0003 * Copyright (C) Siddhesh suthar <siddhesh.it@gmail.com> (Qt Quick port)
0004 *
0005 * Authors:
0006 *   Pascal Georges (pascal.georges1@free.fr) (GTK+ version)
0007 *   Holger Kaelberer <holger.k@elberer.de> (Qt Quick port of imageid)
0008 *   Siddhesh suthar <siddhesh.it@gmail.com> (Qt Quick port)
0009 *   Bruno Coudoin <bruno.coudoin@gcompris.net> (Integration Lang dataset)
0010 *
0011 *   SPDX-License-Identifier: GPL-3.0-or-later
0012 */
0013 .pragma library
0014 .import QtQuick 2.12 as Quick
0015 .import GCompris 1.0 as GCompris
0016 .import "qrc:/gcompris/src/core/core.js" as Core
0017 .import "qrc:/gcompris/src/activities/lang/lang_api.js" as Lang
0018 
0019 var quizItems
0020 var wordList
0021 var remainingWords
0022 var mode
0023 
0024 // @return true if the quiz was ran
0025 function init(loadedItems_, wordList_, mode_) {
0026     quizItems = loadedItems_
0027     wordList = wordList_
0028     mode = mode_
0029 
0030     quizItems.score.numberOfSubLevels = wordList.length
0031     quizItems.score.currentSubLevel = 0
0032 
0033     if(mode == 3) {
0034         quizItems.imageFrame.visible = false
0035         // Remove words for which we don't have voice
0036         for (var j = 0; j < wordList.length ; j++) {
0037             if(!wordList[j].hasVoice) {
0038                 wordList.splice(j, 1)
0039                 j--;
0040             }
0041         }
0042     } else {
0043         quizItems.imageFrame.visible = true
0044     }
0045 
0046     // Bails out if we don't have enough words to play
0047     if(wordList.length < 2) {
0048         return false
0049     }
0050 
0051     quizItems.wordListView.forceActiveFocus()
0052     remainingWords = Core.shuffle(wordList).slice()
0053     nextQuiz();
0054     return true
0055 }
0056 
0057 function nextQuiz() {
0058     quizItems.goodWord = remainingWords.pop()
0059 
0060     var selectedWords = []
0061     selectedWords.push(quizItems.goodWord)
0062 
0063     // Pick 3 wrong words to complete the quiz
0064     for (var i = 0; i < wordList.length; i++) {
0065         if(wordList[i] !== quizItems.goodWord) {
0066             selectedWords.push(wordList[i])
0067         }
0068         if(selectedWords.length > 4)
0069             break
0070     }
0071 
0072     // Push the result in the model
0073     selectedWords = Core.shuffle(selectedWords);
0074     quizItems.wordListModel.clear();
0075     quizItems.wordListModel.append(selectedWords)
0076 
0077     quizItems.wordImage.changeSource(quizItems.goodWord.image)
0078     quizItems.buttonsBlocked = false
0079 }
0080 
0081 function nextSubLevelQuiz() {
0082     if(remainingWords.length === 0) {
0083         quizItems.bonus.good("smiley")
0084     } else {
0085         nextQuiz();
0086     }
0087 }