File indexing completed on 2024-05-19 07:29:44
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 }