Warning, file /education/gcompris/src/activities/tens_complement_use/tens_complement_use.js was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).
0001 /* GCompris - tens_complement_use.js 0002 * 0003 * SPDX-FileCopyrightText: 2022 Samarth Raj <mailforsamarth@gmail.com> 0004 * SPDX-License-Identifier: GPL-3.0-or-later 0005 * 0006 */ 0007 .pragma library 0008 .import "../../core/core.js" as Core 0009 0010 var numberOfLevel; 0011 var numberOfSubLevel; 0012 var items; 0013 var questionArrayValue = [null, "+", null, "=", null]; 0014 var answerArrayValue = ["(", null, "+", null, ")", "+", null, "=", null]; 0015 var indexOfNumberInAnswerArray = [1, 3, 6]; 0016 0017 function start(items_) { 0018 items = items_ 0019 numberOfLevel = items.levels.length; 0020 items.currentLevel = Core.getInitialLevel(numberOfLevel) 0021 items.score.currentSubLevel = 0 0022 initLevel() 0023 } 0024 0025 function stop() { 0026 } 0027 0028 function initLevel() { 0029 items.okButton.visible = false; 0030 clearAllListModels(); 0031 var currentDataset = items.levels[items.currentLevel]; 0032 if(currentDataset.randomValues) { 0033 numberOfSubLevel = currentDataset.numberOfSublevels; 0034 0035 var cards = []; 0036 // Fill the right panel 0037 for(var equationIndex = 0; equationIndex < currentDataset.numberOfEquations; equationIndex ++) { 0038 var questionsModel = { 0039 "addition": [], 0040 "secondRow": [], 0041 "tickVisibility": false, 0042 "isGood": false 0043 }; 0044 0045 var resultToFind = Math.floor(Math.random() * (currentDataset.maxResult - currentDataset.minResult + 1)) + currentDataset.minResult; 0046 0047 // Add the last number to find first 0048 cards.push({ 0049 "value": (resultToFind-10).toString(), 0050 "visibility": true, 0051 "isSignSymbol": false, 0052 "clickable": true 0053 }); 0054 // Ensure we have at least two numbers where the sum is ten 0055 var firstNumberOfSum = Math.floor(Math.random() * 9) + 1; 0056 var counterpart = (10 - firstNumberOfSum).toString(); 0057 cards.push({ 0058 "value": counterpart, 0059 "visibility": true, 0060 "isSignSymbol": false, 0061 "clickable": true 0062 }); 0063 0064 var indexCounter = 0; 0065 var questionValue = [firstNumberOfSum, resultToFind-firstNumberOfSum, resultToFind]; 0066 for(var i = 0; i < questionArrayValue.length; i++) { 0067 var isNumber = true; 0068 if(questionArrayValue[i] == "+" || questionArrayValue[i] == "(" || questionArrayValue[i] == ")" || questionArrayValue[i] == "=") { 0069 isNumber = false; 0070 } 0071 else { 0072 questionArrayValue[i] = questionValue[indexCounter].toString(); 0073 indexCounter++; 0074 } 0075 var card = { 0076 "value": questionArrayValue[i].toString(), 0077 "visibility": true, 0078 "isSignSymbol": !isNumber, 0079 "clickable": false 0080 } 0081 questionsModel.addition.push(card); 0082 } 0083 indexCounter = 0; 0084 var splitValue = [firstNumberOfSum, "?", "?", resultToFind]; 0085 for(var i = 0; i < answerArrayValue.length; i++) { 0086 var isNumber = true; 0087 if(answerArrayValue[i] == "+" || answerArrayValue[i] == "(" || answerArrayValue[i] == ")" || answerArrayValue[i] == "=") { 0088 isNumber = false; 0089 } 0090 else { 0091 answerArrayValue[i] = splitValue[indexCounter].toString(); 0092 indexCounter++; 0093 } 0094 var card = { 0095 "value": answerArrayValue[i].toString(), 0096 "visibility": true, 0097 "clickable": (answerArrayValue[i] === "?"), 0098 "isSignSymbol": !isNumber 0099 } 0100 questionsModel.secondRow.push(card); 0101 } 0102 items.holderListModel.append(questionsModel); 0103 } 0104 0105 // Fill left container 0106 for(var i = 0; i < currentDataset.numberOfNumbersInLeftContainer-cards.length+1; i++) { 0107 var randomNumber = Math.floor(Math.random() * 9) + 1; 0108 var card = { 0109 "value": randomNumber.toString(), 0110 "visibility": true, 0111 "isSignSymbol": false, 0112 "clickable": true 0113 } 0114 cards.push(card); 0115 } 0116 // Shuffle and add to the model 0117 Core.shuffle(cards); 0118 for(var i = 0 ; i < cards.length ; ++ i) { 0119 items.cardListModel.append(cards[i]); 0120 } 0121 } 0122 else { 0123 var sublevel = currentDataset.values[currentSubLevel]; 0124 numberOfSubLevel = currentDataset.values.length; 0125 var numberValue = sublevel.numberValue; 0126 0127 // Fill left container 0128 for(var i = 0; i < numberValue.length; i++) { 0129 var card = { 0130 "value": numberValue[i].toString(), 0131 "visibility": true, 0132 "isSignSymbol": false, 0133 "clickable": true 0134 } 0135 items.cardListModel.append(card); 0136 } 0137 0138 for(var equationIndex = 0; equationIndex < sublevel.questions.length; equationIndex ++) { 0139 var questionsModel = { 0140 "addition": [], 0141 "secondRow": [], 0142 "tickVisibility": false, 0143 "isGood": false 0144 }; 0145 0146 var question = sublevel.questions[equationIndex]; 0147 var indexCounter = 0; 0148 for(var i = 0; i < questionArrayValue.length; i++) { 0149 var isNumber = true; 0150 if(questionArrayValue[i] == "+" || questionArrayValue[i] == "(" || questionArrayValue[i] == ")" || questionArrayValue[i] == "=") { 0151 isNumber = false; 0152 } 0153 else { 0154 questionArrayValue[i] = question.questionValue[indexCounter].toString(); 0155 indexCounter++; 0156 } 0157 var card = { 0158 "value": questionArrayValue[i].toString(), 0159 "visibility": true, 0160 "isSignSymbol": !isNumber, 0161 "clickable": false 0162 } 0163 questionsModel.addition.push(card); 0164 } 0165 indexCounter = 0; 0166 for(var i = 0; i < answerArrayValue.length; i++) { 0167 var isNumber = true; 0168 if(answerArrayValue[i] == "+" || answerArrayValue[i] == "(" || answerArrayValue[i] == ")" || answerArrayValue[i] == "=") { 0169 isNumber = false; 0170 } 0171 else { 0172 answerArrayValue[i] = question.splitValue[indexCounter].toString(); 0173 indexCounter++; 0174 } 0175 var card = { 0176 "value": answerArrayValue[i].toString(), 0177 "visibility": true, 0178 "clickable": (answerArrayValue[i] === "?"), 0179 "isSignSymbol": !isNumber 0180 } 0181 questionsModel.secondRow.push(card); 0182 } 0183 items.holderListModel.append(questionsModel); 0184 } 0185 } 0186 items.score.numberOfSubLevels = numberOfSubLevel; 0187 items.buttonsBlocked = false; 0188 } 0189 0190 function nextLevel() { 0191 items.score.stopWinAnimation(); 0192 items.currentLevel = Core.getNextLevel(items.currentLevel, numberOfLevel); 0193 items.score.currentSubLevel = 0; 0194 initLevel(); 0195 } 0196 0197 function nextSubLevel() { 0198 if(items.score.currentSubLevel >= numberOfSubLevel) { 0199 items.bonus.good("flower"); 0200 } else { 0201 initLevel(); 0202 } 0203 } 0204 0205 function previousLevel() { 0206 items.score.stopWinAnimation(); 0207 items.currentLevel = Core.getPreviousLevel(items.currentLevel, numberOfLevel); 0208 items.score.currentSubLevel = 0; 0209 initLevel(); 0210 } 0211 0212 function getEnteredCard() { 0213 if(items.selectedIndex == -1) { 0214 return "?"; 0215 } 0216 items.cardListModel.setProperty(items.selectedIndex, "visibility", false); 0217 var tempSelected = items.selectedIndex; 0218 items.selectedIndex = -1; 0219 return items.cardListModel.get(tempSelected).value.toString(); 0220 } 0221 0222 function reappearNumberCard(value) { 0223 for(var i = 0; i < items.cardListModel.count; i++) { 0224 var card = items.cardListModel.get(i); 0225 if(value == card.value && card.visibility == false) { 0226 items.cardListModel.setProperty(i, "visibility", true); 0227 break; 0228 } 0229 } 0230 } 0231 0232 function clearAllListModels() { 0233 items.cardListModel.clear(); 0234 items.holderListModel.clear(); 0235 } 0236 0237 function showOkButton() { 0238 var checkQuestionMark = true; 0239 for(var i = 0; i < items.holderListModel.count; i++) { 0240 var equation = items.holderListModel.get(i).secondRow; 0241 for(var j = 0; j < equation.count; j++) { 0242 var answer = equation.get(j); 0243 if(answer.value == "?") { 0244 checkQuestionMark = false; 0245 break; 0246 } 0247 } 0248 } 0249 0250 items.okButton.visible = checkQuestionMark; 0251 } 0252 0253 function checkAnswer() { 0254 var allOk = true; 0255 for(var i = 0; i < items.holderListModel.count; i++) { 0256 var check = true; 0257 var equation = items.holderListModel.get(i); 0258 var solution = equation.secondRow; 0259 if(parseInt(solution.get(indexOfNumberInAnswerArray[0]).value) + parseInt(solution.get(indexOfNumberInAnswerArray[1]).value) != 10) { 0260 check = false; 0261 } 0262 var rest = parseInt(solution.get(solution.count-1).value)-10; 0263 if(parseInt(solution.get(indexOfNumberInAnswerArray[2]).value) != rest) { 0264 check = false; 0265 } 0266 if(!check) { 0267 allOk = false; 0268 } 0269 equation.tickVisibility = true; 0270 equation.isGood = check; 0271 } 0272 if(allOk) { 0273 items.buttonsBlocked = true; 0274 items.score.currentSubLevel++ 0275 items.score.playWinAnimation() 0276 items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/completetask.wav") 0277 } 0278 else { 0279 items.audioEffects.play("qrc:/gcompris/src/core/resource/sounds/crash.wav") 0280 } 0281 }