Changeset View
Changeset View
Standalone View
Standalone View
src/activities/magic-hat-minus/magic-hat.js
Show All 18 Lines | |||||
19 | * along with this program; if not, see <https://www.gnu.org/licenses/>. | 19 | * along with this program; if not, see <https://www.gnu.org/licenses/>. | ||
20 | */ | 20 | */ | ||
21 | .pragma library | 21 | .pragma library | ||
22 | .import QtQuick 2.6 as Quick | 22 | .import QtQuick 2.6 as Quick | ||
23 | 23 | | |||
24 | var url = "qrc:/gcompris/src/activities/magic-hat-minus/resource/" | 24 | var url = "qrc:/gcompris/src/activities/magic-hat-minus/resource/" | ||
25 | 25 | | |||
26 | var currentLevel | 26 | var currentLevel | ||
27 | var numberOfLevel = 9 | 27 | var numberOfLevel | ||
28 | var numberOfUserStars | 28 | var numberOfUserStars | ||
29 | var items; | 29 | var items; | ||
30 | var mode; | 30 | var mode; | ||
31 | var magicHat | 31 | var magicHat | ||
32 | var numberOfStars | 32 | var numberOfStars | ||
33 | var nbStarsToAddOrRemove | 33 | var nbStarsToAddOrRemove | ||
34 | var nbStarsToCount | 34 | var nbStarsToCount | ||
35 | var animationCount | 35 | var animationCount | ||
36 | var questionCoefficients = [] | ||||
37 | var maxStarSlots = 30 | ||||
timotheegiet: Please improve the naming of those var. | |||||
38 | var answerCoefficients = [] | ||||
39 | var coefficientsNeeded = false | ||||
36 | 40 | | |||
37 | function start(items_, mode_) { | 41 | function start(items_, mode_) { | ||
38 | items = items_ | 42 | items = items_ | ||
39 | mode = mode_ | 43 | mode = mode_ | ||
40 | magicHat = items.hat | 44 | magicHat = items.hat | ||
41 | currentLevel = 0 | 45 | currentLevel = 0 | ||
46 | numberOfLevel = items.levels.length | ||||
42 | initLevel() | 47 | initLevel() | ||
43 | } | 48 | } | ||
44 | 49 | | |||
45 | function stop() { | 50 | function stop() { | ||
46 | } | 51 | } | ||
47 | 52 | | |||
48 | function initLevel() { | 53 | function initLevel() { | ||
49 | items.bar.level = currentLevel + 1 | 54 | items.bar.level = currentLevel + 1 | ||
50 | magicHat.state = "NormalPosition" | 55 | magicHat.state = "NormalPosition" | ||
51 | numberOfStars = new Array(0, 0, 0) | 56 | numberOfStars = new Array(0, 0, 0) | ||
52 | numberOfUserStars = new Array(0, 0, 0) | 57 | numberOfUserStars = new Array(0, 0, 0) | ||
53 | nbStarsToAddOrRemove = new Array(0, 0, 0) | 58 | nbStarsToAddOrRemove = new Array(0, 0, 0) | ||
54 | nbStarsToCount = new Array(0, 0, 0) | 59 | nbStarsToCount = new Array(0, 0, 0) | ||
55 | animationCount = 0 | 60 | animationCount = 0 | ||
56 | 61 | | |||
57 | if(currentLevel > 0) { | 62 | if(currentLevel > 0) { | ||
58 | items.introductionText.visible = false | 63 | items.introductionText.visible = false | ||
59 | } else { | 64 | } else { | ||
60 | items.introductionText.visible = true | 65 | items.introductionText.visible = true | ||
61 | } | 66 | } | ||
62 | 67 | coefficientsNeeded = (items.maxValue / maxStarSlots <= 1) ? false : true | |||
don't use hardcoded values. Keep it in a variable and use that variable it. Will be more flexible and easy for anyone to find modify it he wants. amankumargupta: don't use hardcoded values. Keep it in a variable and use that variable it. Will be more… | |||||
63 | for(var j=0; j<3; j++) { | 68 | for(var j = 0; j < 3; j++) { | ||
amankumargupta: missing spaces between operators and operands. | |||||
64 | items.repeatersList[0].itemAt(j).initStars() | 69 | items.repeatersList[0].itemAt(j).initStars() | ||
65 | items.repeatersList[1].itemAt(j).initStars() | 70 | items.repeatersList[1].itemAt(j).initStars() | ||
66 | items.repeatersList[2].itemAt(j).resetStars() | 71 | items.repeatersList[2].itemAt(j).resetStars() | ||
67 | } | 72 | } | ||
68 | 73 | if(!coefficientsNeeded) { | |||
69 | var maxValue = mode === "minus" ? 10 : 9 | 74 | questionCoefficients[0] = questionCoefficients[1] = questionCoefficients[2] = 1; | ||
70 | switch(currentLevel) { | 75 | answerCoefficients[0] = answerCoefficients[1] = answerCoefficients[2] = 1; | ||
71 | case 0: numberOfStars[0] = getRandomInt(2,4) | 76 | setCoefficientVisibility(false) | ||
72 | break; | 77 | setWantedColor() | ||
jjazeix: is it needed? If no args, it does nothing? | |||||
73 | case 1: numberOfStars[0] = getRandomInt(2,6) | 78 | } else { | ||
74 | break; | 79 | for(var i = 0; i < 3; i++) | ||
75 | case 2: numberOfStars[0] = getRandomInt(2,maxValue) | 80 | questionCoefficients[i] = Math.round(items.levels[currentLevel].maxStars[i] / 10); | ||
76 | break; | 81 | answerCoefficients[0] = items.maxValue / 100; | ||
77 | case 3: numberOfStars[0] = getRandomInt(2,5) | 82 | answerCoefficients[1] = items.maxValue / 20; | ||
78 | numberOfStars[1] = getRandomInt(2,5) | 83 | answerCoefficients[2] = items.maxValue / 10; | ||
79 | break; | 84 | setCoefficientVisibility(true) | ||
80 | case 4: numberOfStars[0] = getRandomInt(2,8) | 85 | setWantedColor("1") | ||
81 | numberOfStars[1] = getRandomInt(2,8) | 86 | } | ||
82 | break; | 87 | var subtractor = (mode === "minus") ? 0 : 1 | ||
Put the expressions in parenthesis. Same comment for the ones below. amankumargupta: Put the expressions in parenthesis. Same comment for the ones below.
Improves code readability.
| |||||
83 | case 5: numberOfStars[0] = getRandomInt(2,maxValue) | 88 | numberOfStars[0] = (items.levels[currentLevel].maxStars[0] > 0) ? getRandomInt(items.levels[currentLevel].minStars[0], (items.levels[currentLevel].maxStars[0] / questionCoefficients[0]) - subtractor) : 0 | ||
84 | numberOfStars[1] = getRandomInt(2,maxValue) | 89 | numberOfStars[1] = (items.levels[currentLevel].maxStars[1] > 0) ? getRandomInt(items.levels[currentLevel].minStars[1], (items.levels[currentLevel].maxStars[1] / questionCoefficients[1]) - subtractor) : 0 | ||
85 | break; | 90 | numberOfStars[2] = (items.levels[currentLevel].maxStars[2] > 0) ? getRandomInt(items.levels[currentLevel].minStars[2], (items.levels[currentLevel].maxStars[2] / questionCoefficients[2]) - subtractor) : 0 | ||
86 | case 6: numberOfStars[0] = getRandomInt(2,4) | | |||
87 | numberOfStars[1] = getRandomInt(2,4) | | |||
88 | numberOfStars[2] = getRandomInt(2,4) | | |||
89 | break; | | |||
90 | case 7: numberOfStars[0] = getRandomInt(2,6) | | |||
91 | numberOfStars[1] = getRandomInt(2,6) | | |||
92 | numberOfStars[2] = getRandomInt(2,6) | | |||
93 | break; | | |||
94 | case 8: numberOfStars[0] = getRandomInt(2,8) | | |||
95 | numberOfStars[1] = getRandomInt(2,8) | | |||
96 | numberOfStars[2] = getRandomInt(2,8) | | |||
97 | break; | | |||
98 | case 9: numberOfStars[0] = getRandomInt(2,maxValue) | | |||
99 | numberOfStars[1] = getRandomInt(2,maxValue) | | |||
100 | numberOfStars[2] = getRandomInt(2,maxValue) | | |||
101 | break; | | |||
102 | } | | |||
103 | 91 | | |||
104 | for(var i=0; i<3; i++) { | 92 | for(var i=0; i<3; i++) { | ||
105 | items.repeatersList[0].itemAt(i).nbStarsOn = numberOfStars[i] | 93 | items.repeatersList[0].itemAt(i).nbStarsOn = numberOfStars[i] | ||
94 | items.repeatersList[0].itemAt(i).coefficient = questionCoefficients[i] | ||||
106 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | 95 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | ||
96 | items.repeatersList[1].itemAt(i).coefficient = questionCoefficients[i] | ||||
107 | items.repeatersList[2].itemAt(i).nbStarsOn = 0 | 97 | items.repeatersList[2].itemAt(i).nbStarsOn = 0 | ||
108 | items.repeatersList[2].itemAt(i).authorizeClick = false | 98 | items.repeatersList[2].itemAt(i).authorizeClick = false | ||
99 | items.repeatersList[2].itemAt(i).coefficient = answerCoefficients[i] | ||||
109 | if(numberOfStars[i] > 0) { | 100 | if(numberOfStars[i] > 0) { | ||
110 | items.repeatersList[0].itemAt(i).opacity = 1 | 101 | items.repeatersList[0].itemAt(i).opacity = 1 | ||
111 | items.repeatersList[1].itemAt(i).opacity = 1 | 102 | items.repeatersList[1].itemAt(i).opacity = 1 | ||
112 | items.repeatersList[2].itemAt(i).opacity = 1 | 103 | items.repeatersList[2].itemAt(i).opacity = 1 | ||
113 | if(mode === "minus") | 104 | if(mode === "minus") | ||
114 | nbStarsToAddOrRemove[i] = getRandomInt(1, numberOfStars[i]-1) | 105 | nbStarsToAddOrRemove[i] = getRandomInt(1, numberOfStars[i]-1) | ||
115 | else | 106 | else | ||
116 | nbStarsToAddOrRemove[i] = getRandomInt(1, 10-numberOfStars[i]) | 107 | nbStarsToAddOrRemove[i] = getRandomInt(1, 10-numberOfStars[i]) | ||
117 | } | 108 | } | ||
118 | else { | 109 | else { | ||
119 | items.repeatersList[0].itemAt(i).opacity = 0 | 110 | items.repeatersList[0].itemAt(i).opacity = 0 | ||
120 | items.repeatersList[1].itemAt(i).opacity = 0 | 111 | items.repeatersList[1].itemAt(i).opacity = 0 | ||
121 | items.repeatersList[2].itemAt(i).opacity = 0 | 112 | items.repeatersList[2].itemAt(i).opacity = 0 | ||
122 | } | 113 | } | ||
123 | } | 114 | } | ||
124 | 115 | | |||
125 | if(mode === "minus") { | 116 | if(mode === "minus") { | ||
126 | for(var i=0; i<3; i++) { | 117 | for(var i = 0; i < 3; i++) { | ||
127 | nbStarsToCount[i] = numberOfStars[i] - nbStarsToAddOrRemove[i] | 118 | nbStarsToCount[i] = numberOfStars[i] - nbStarsToAddOrRemove[i] | ||
128 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | 119 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | ||
129 | } | 120 | } | ||
130 | } else { | 121 | } else { | ||
131 | for(var i=0; i<3; i++) { | 122 | for(var i = 0; i < 3; i++) { | ||
132 | nbStarsToCount[i] = numberOfStars[i]+nbStarsToAddOrRemove[i] | 123 | nbStarsToCount[i] = numberOfStars[i]+nbStarsToAddOrRemove[i] | ||
133 | items.repeatersList[1].itemAt(i).nbStarsOn = nbStarsToAddOrRemove[i] | 124 | items.repeatersList[1].itemAt(i).nbStarsOn = nbStarsToAddOrRemove[i] | ||
134 | } | 125 | } | ||
135 | } | 126 | } | ||
136 | } | 127 | } | ||
137 | 128 | | |||
129 | function setCoefficientVisibility(visibility) { | ||||
130 | for(var i = 0; i < 3; i++) { | ||||
131 | for(var j = 0; j < 3; j++) { | ||||
amankumargupta: Why not use a nested loop from 0 to 2? | |||||
132 | items.repeatersList[j].itemAt(i).coefficientVisible = visibility | ||||
133 | items.repeatersList[j].itemAt(i).maxRange = items.maxValue.toString() | ||||
134 | } | ||||
135 | } | ||||
136 | } | ||||
137 | | ||||
138 | function setWantedColor(colorValue) { | ||||
139 | if(colorValue != null) { | ||||
140 | for(var i = 0; i < 3; i++) { | ||||
141 | for(var j = 0; j < 3; j++) { | ||||
142 | items.repeatersList[j].itemAt(i).starsColor = colorValue | ||||
143 | } | ||||
amankumargupta: nested loop would be better | |||||
144 | } | ||||
145 | } | ||||
146 | } | ||||
147 | | ||||
138 | function userClickedAStar(barIndex,state) { | 148 | function userClickedAStar(barIndex,state) { | ||
139 | if(state) | 149 | if(state) | ||
140 | numberOfUserStars[barIndex]++ | 150 | numberOfUserStars[barIndex]++ | ||
141 | else | 151 | else | ||
142 | numberOfUserStars[barIndex]-- | 152 | numberOfUserStars[barIndex]-- | ||
143 | } | 153 | } | ||
144 | 154 | | |||
145 | function verifyAnswer() { | 155 | function verifyAnswer() { | ||
156 | if(items.maxValue / maxStarSlots <= 1) { | ||||
146 | if(numberOfUserStars[0] === nbStarsToCount[0] && | 157 | if(numberOfUserStars[0] === nbStarsToCount[0] && | ||
147 | numberOfUserStars[1] === nbStarsToCount[1] && | 158 | numberOfUserStars[1] === nbStarsToCount[1] && | ||
148 | numberOfUserStars[2] === nbStarsToCount[2]) { | 159 | numberOfUserStars[2] === nbStarsToCount[2]) { | ||
149 | items.bonus.good("flower") | 160 | items.bonus.good("flower") | ||
150 | } else { | 161 | } else { | ||
151 | items.bonus.bad("flower") | 162 | items.bonus.bad("flower") | ||
152 | } | 163 | } | ||
The same thing for this formula like I said previously for the one above. amankumargupta: The same thing for this formula like I said previously for the one above. | |||||
164 | } else { | ||||
165 | var starsCalculatedByUser = numberOfUserStars[0] * answerCoefficients[0] + numberOfUserStars[1] * answerCoefficients[1] + | ||||
166 | numberOfUserStars[2] * answerCoefficients[2]; | ||||
167 | var actualNumberOfStars = nbStarsToCount[0] * questionCoefficients[0] + nbStarsToCount[1] * questionCoefficients[1] + | ||||
168 | nbStarsToCount[2] * questionCoefficients[2]; | ||||
169 | if(starsCalculatedByUser == actualNumberOfStars) | ||||
jjazeix: 2 spaces after == | |||||
170 | items.bonus.good("flower") | ||||
171 | else | ||||
172 | items.bonus.bad("flower") | ||||
Can you rename these two variables to more understandable names (this one and the one below)? amankumargupta: Can you rename these two variables to more understandable names (this one and the one below)? | |||||
173 | } | ||||
153 | } | 174 | } | ||
154 | 175 | | |||
155 | function nextLevel() { | 176 | function nextLevel() { | ||
156 | if(numberOfLevel <= ++currentLevel ) { | 177 | if(numberOfLevel <= ++currentLevel ) { | ||
157 | currentLevel = 0 | 178 | currentLevel = 0 | ||
158 | } | 179 | } | ||
159 | initLevel(); | 180 | initLevel(); | ||
160 | } | 181 | } | ||
161 | 182 | | |||
162 | function previousLevel() { | 183 | function previousLevel() { | ||
163 | if(--currentLevel < 0) { | 184 | if(--currentLevel < 0) { | ||
164 | currentLevel = numberOfLevel - 1 | 185 | currentLevel = numberOfLevel - 1 | ||
165 | } | 186 | } | ||
166 | initLevel(); | 187 | initLevel(); | ||
167 | } | 188 | } | ||
168 | 189 | | |||
169 | function moveStarsUnderHat() { | 190 | function moveStarsUnderHat() { | ||
170 | if(currentLevel == 0) { | 191 | if(currentLevel == 0) { | ||
171 | items.introductionText.visible = false | 192 | items.introductionText.visible = false | ||
172 | } | 193 | } | ||
173 | 194 | | |||
174 | for(var j=0; j<3; j++) { | 195 | for(var j = 0; j < 3; j++) { | ||
175 | items.repeatersList[0].itemAt(j).moveStars() | 196 | items.repeatersList[0].itemAt(j).moveStars() | ||
176 | } | 197 | } | ||
177 | } | 198 | } | ||
178 | 199 | | |||
179 | function moveBackMinusStars() { | 200 | function moveBackMinusStars() { | ||
180 | for(var j=0; j<3; j++) { | 201 | for(var j = 0; j < 3; j++) { | ||
181 | items.repeatersList[0].itemAt(j). | 202 | items.repeatersList[0].itemAt(j). | ||
182 | moveBackMinusStars(items.repeatersList[1].itemAt(j), | 203 | moveBackMinusStars(items.repeatersList[1].itemAt(j), | ||
183 | nbStarsToAddOrRemove[j]) | 204 | nbStarsToAddOrRemove[j]) | ||
184 | } | 205 | } | ||
185 | } | 206 | } | ||
186 | 207 | | |||
187 | function movePlusStars() { | 208 | function movePlusStars() { | ||
188 | for(var j=0; j<3; j++) { | 209 | for(var j = 0; j < 3; j++) { | ||
189 | items.repeatersList[1].itemAt(j).moveStars() | 210 | items.repeatersList[1].itemAt(j).moveStars() | ||
190 | } | 211 | } | ||
191 | } | 212 | } | ||
192 | 213 | | |||
193 | // Function called everytime the first animation ends | 214 | // Function called everytime the first animation ends | ||
194 | function animation1Finished(barGroupIndex) { | 215 | function animation1Finished(barGroupIndex) { | ||
195 | animationCount++ | 216 | animationCount++ | ||
196 | if(barGroupIndex == 0) { | 217 | if(barGroupIndex == 0) { | ||
Show All 17 Lines | 233 | { | |||
214 | if(animationCount === nbStarsToAddOrRemove[0] + | 235 | if(animationCount === nbStarsToAddOrRemove[0] + | ||
215 | nbStarsToAddOrRemove[1] + nbStarsToAddOrRemove[2]) { | 236 | nbStarsToAddOrRemove[1] + nbStarsToAddOrRemove[2]) { | ||
216 | animationCount = 0 | 237 | animationCount = 0 | ||
217 | userGuessNumberState() | 238 | userGuessNumberState() | ||
218 | } | 239 | } | ||
219 | } | 240 | } | ||
220 | 241 | | |||
221 | function userGuessNumberState() { | 242 | function userGuessNumberState() { | ||
222 | for(var i=0; i<3; i++) { | 243 | for(var i = 0; i < 3; i++) { | ||
223 | if(numberOfStars[i] + nbStarsToAddOrRemove[i]) | 244 | if(numberOfStars[i] + nbStarsToAddOrRemove[i]) | ||
224 | items.repeatersList[2].itemAt(i).authorizeClick = true | 245 | items.repeatersList[2].itemAt(i).authorizeClick = true | ||
225 | } | 246 | } | ||
226 | magicHat.state = "GuessNumber" | 247 | magicHat.state = "GuessNumber" | ||
227 | } | 248 | } | ||
228 | 249 | | |||
229 | function getRandomInt(min, max) { | 250 | function getRandomInt(min, max) { | ||
230 | return Math.floor(Math.random() * (max - min + 1) + min); | 251 | return Math.floor(Math.random() * (max - min + 1) + min); | ||
231 | } | 252 | } |
Please improve the naming of those var.