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 | } else { | ||
jjazeix: is it needed? If no args, it does nothing? | |||||
73 | case 1: numberOfStars[0] = getRandomInt(2,6) | 78 | for(var i = 0; i < 3; i++) | ||
74 | break; | 79 | questionCoefficients[i] = Math.round(items.levels[currentLevel].maxStars[i] / 10); | ||
75 | case 2: numberOfStars[0] = getRandomInt(2,maxValue) | 80 | answerCoefficients[0] = items.maxValue / 100; | ||
76 | break; | 81 | answerCoefficients[1] = items.maxValue / 20; | ||
77 | case 3: numberOfStars[0] = getRandomInt(2,5) | 82 | answerCoefficients[2] = items.maxValue / 10; | ||
78 | numberOfStars[1] = getRandomInt(2,5) | 83 | setCoefficientVisibility(true) | ||
79 | break; | 84 | setWantedColor("1") | ||
80 | case 4: numberOfStars[0] = getRandomInt(2,8) | 85 | } | ||
81 | numberOfStars[1] = getRandomInt(2,8) | 86 | 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.
| |||||
82 | break; | 87 | numberOfStars[0] = (items.levels[currentLevel].maxStars[0] > 0) ? getRandomInt(items.levels[currentLevel].minStars[0], (items.levels[currentLevel].maxStars[0] / questionCoefficients[0]) - subtractor) : 0 | ||
83 | case 5: numberOfStars[0] = getRandomInt(2,maxValue) | 88 | numberOfStars[1] = (items.levels[currentLevel].maxStars[1] > 0) ? getRandomInt(items.levels[currentLevel].minStars[1], (items.levels[currentLevel].maxStars[1] / questionCoefficients[1]) - subtractor) : 0 | ||
84 | numberOfStars[1] = getRandomInt(2,maxValue) | 89 | numberOfStars[2] = (items.levels[currentLevel].maxStars[2] > 0) ? getRandomInt(items.levels[currentLevel].minStars[2], (items.levels[currentLevel].maxStars[2] / questionCoefficients[2]) - subtractor) : 0 | ||
85 | break; | | |||
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 | 90 | | |||
104 | for(var i=0; i<3; i++) { | 91 | for(var i=0; i<3; i++) { | ||
105 | items.repeatersList[0].itemAt(i).nbStarsOn = numberOfStars[i] | 92 | items.repeatersList[0].itemAt(i).nbStarsOn = numberOfStars[i] | ||
93 | items.repeatersList[0].itemAt(i).coefficient = questionCoefficients[i] | ||||
106 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | 94 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | ||
95 | items.repeatersList[1].itemAt(i).coefficient = questionCoefficients[i] | ||||
107 | items.repeatersList[2].itemAt(i).nbStarsOn = 0 | 96 | items.repeatersList[2].itemAt(i).nbStarsOn = 0 | ||
108 | items.repeatersList[2].itemAt(i).authorizeClick = false | 97 | items.repeatersList[2].itemAt(i).authorizeClick = false | ||
98 | items.repeatersList[2].itemAt(i).coefficient = answerCoefficients[i] | ||||
109 | if(numberOfStars[i] > 0) { | 99 | if(numberOfStars[i] > 0) { | ||
110 | items.repeatersList[0].itemAt(i).opacity = 1 | 100 | items.repeatersList[0].itemAt(i).opacity = 1 | ||
111 | items.repeatersList[1].itemAt(i).opacity = 1 | 101 | items.repeatersList[1].itemAt(i).opacity = 1 | ||
112 | items.repeatersList[2].itemAt(i).opacity = 1 | 102 | items.repeatersList[2].itemAt(i).opacity = 1 | ||
113 | if(mode === "minus") | 103 | if(mode === "minus") | ||
114 | nbStarsToAddOrRemove[i] = getRandomInt(1, numberOfStars[i]-1) | 104 | nbStarsToAddOrRemove[i] = getRandomInt(1, numberOfStars[i]-1) | ||
115 | else | 105 | else | ||
116 | nbStarsToAddOrRemove[i] = getRandomInt(1, 10-numberOfStars[i]) | 106 | nbStarsToAddOrRemove[i] = getRandomInt(1, 10-numberOfStars[i]) | ||
117 | } | 107 | } | ||
118 | else { | 108 | else { | ||
119 | items.repeatersList[0].itemAt(i).opacity = 0 | 109 | items.repeatersList[0].itemAt(i).opacity = 0 | ||
120 | items.repeatersList[1].itemAt(i).opacity = 0 | 110 | items.repeatersList[1].itemAt(i).opacity = 0 | ||
121 | items.repeatersList[2].itemAt(i).opacity = 0 | 111 | items.repeatersList[2].itemAt(i).opacity = 0 | ||
122 | } | 112 | } | ||
123 | } | 113 | } | ||
124 | 114 | | |||
125 | if(mode === "minus") { | 115 | if(mode === "minus") { | ||
126 | for(var i=0; i<3; i++) { | 116 | for(var i = 0; i < 3; i++) { | ||
127 | nbStarsToCount[i] = numberOfStars[i] - nbStarsToAddOrRemove[i] | 117 | nbStarsToCount[i] = numberOfStars[i] - nbStarsToAddOrRemove[i] | ||
128 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | 118 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | ||
129 | } | 119 | } | ||
130 | } else { | 120 | } else { | ||
131 | for(var i=0; i<3; i++) { | 121 | for(var i = 0; i < 3; i++) { | ||
132 | nbStarsToCount[i] = numberOfStars[i]+nbStarsToAddOrRemove[i] | 122 | nbStarsToCount[i] = numberOfStars[i]+nbStarsToAddOrRemove[i] | ||
133 | items.repeatersList[1].itemAt(i).nbStarsOn = nbStarsToAddOrRemove[i] | 123 | items.repeatersList[1].itemAt(i).nbStarsOn = nbStarsToAddOrRemove[i] | ||
134 | } | 124 | } | ||
135 | } | 125 | } | ||
136 | } | 126 | } | ||
137 | 127 | | |||
128 | function setCoefficientVisibility(visibility) { | ||||
129 | for(var i = 0; i < 3; i++) { | ||||
130 | for(var j = 0; j < 3; j++) { | ||||
amankumargupta: Why not use a nested loop from 0 to 2? | |||||
131 | items.repeatersList[j].itemAt(i).coefficientVisible = visibility | ||||
132 | } | ||||
133 | } | ||||
134 | } | ||||
135 | | ||||
136 | function setWantedColor(colorValue) { | ||||
137 | if(colorValue != null) { | ||||
138 | for(var i = 0; i < 3; i++) { | ||||
139 | for(var j = 0; j < 3; j++) { | ||||
140 | items.repeatersList[j].itemAt(i).starsColor = colorValue | ||||
141 | } | ||||
142 | } | ||||
amankumargupta: nested loop would be better | |||||
143 | } | ||||
144 | } | ||||
145 | | ||||
138 | function userClickedAStar(barIndex,state) { | 146 | function userClickedAStar(barIndex,state) { | ||
139 | if(state) | 147 | if(state) | ||
140 | numberOfUserStars[barIndex]++ | 148 | numberOfUserStars[barIndex]++ | ||
141 | else | 149 | else | ||
142 | numberOfUserStars[barIndex]-- | 150 | numberOfUserStars[barIndex]-- | ||
143 | } | 151 | } | ||
144 | 152 | | |||
145 | function verifyAnswer() { | 153 | function verifyAnswer() { | ||
154 | if(items.maxValue / maxStarSlots <= 1) { | ||||
146 | if(numberOfUserStars[0] === nbStarsToCount[0] && | 155 | if(numberOfUserStars[0] === nbStarsToCount[0] && | ||
147 | numberOfUserStars[1] === nbStarsToCount[1] && | 156 | numberOfUserStars[1] === nbStarsToCount[1] && | ||
148 | numberOfUserStars[2] === nbStarsToCount[2]) { | 157 | numberOfUserStars[2] === nbStarsToCount[2]) { | ||
149 | items.bonus.good("flower") | 158 | items.bonus.good("flower") | ||
150 | } else { | 159 | } else { | ||
151 | items.bonus.bad("flower") | 160 | items.bonus.bad("flower") | ||
152 | } | 161 | } | ||
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. | |||||
162 | } else { | ||||
163 | var starsCalculatedByUser = numberOfUserStars[0] * answerCoefficients[0] + numberOfUserStars[1] * answerCoefficients[1] + | ||||
164 | numberOfUserStars[2] * answerCoefficients[2]; | ||||
165 | var actualNumberOfStars = nbStarsToCount[0] * questionCoefficients[0] + nbStarsToCount[1] * questionCoefficients[1] + | ||||
166 | nbStarsToCount[2] * questionCoefficients[2]; | ||||
167 | if(starsCalculatedByUser == actualNumberOfStars) | ||||
jjazeix: 2 spaces after == | |||||
168 | items.bonus.good("flower") | ||||
169 | else | ||||
170 | 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)? | |||||
171 | } | ||||
153 | } | 172 | } | ||
154 | 173 | | |||
155 | function nextLevel() { | 174 | function nextLevel() { | ||
156 | if(numberOfLevel <= ++currentLevel ) { | 175 | if(numberOfLevel <= ++currentLevel ) { | ||
157 | currentLevel = 0 | 176 | currentLevel = 0 | ||
158 | } | 177 | } | ||
159 | initLevel(); | 178 | initLevel(); | ||
160 | } | 179 | } | ||
161 | 180 | | |||
162 | function previousLevel() { | 181 | function previousLevel() { | ||
163 | if(--currentLevel < 0) { | 182 | if(--currentLevel < 0) { | ||
164 | currentLevel = numberOfLevel - 1 | 183 | currentLevel = numberOfLevel - 1 | ||
165 | } | 184 | } | ||
166 | initLevel(); | 185 | initLevel(); | ||
167 | } | 186 | } | ||
168 | 187 | | |||
169 | function moveStarsUnderHat() { | 188 | function moveStarsUnderHat() { | ||
170 | if(currentLevel == 0) { | 189 | if(currentLevel == 0) { | ||
171 | items.introductionText.visible = false | 190 | items.introductionText.visible = false | ||
172 | } | 191 | } | ||
173 | 192 | | |||
174 | for(var j=0; j<3; j++) { | 193 | for(var j = 0; j < 3; j++) { | ||
175 | items.repeatersList[0].itemAt(j).moveStars() | 194 | items.repeatersList[0].itemAt(j).moveStars() | ||
176 | } | 195 | } | ||
177 | } | 196 | } | ||
178 | 197 | | |||
179 | function moveBackMinusStars() { | 198 | function moveBackMinusStars() { | ||
180 | for(var j=0; j<3; j++) { | 199 | for(var j = 0; j < 3; j++) { | ||
181 | items.repeatersList[0].itemAt(j). | 200 | items.repeatersList[0].itemAt(j). | ||
182 | moveBackMinusStars(items.repeatersList[1].itemAt(j), | 201 | moveBackMinusStars(items.repeatersList[1].itemAt(j), | ||
183 | nbStarsToAddOrRemove[j]) | 202 | nbStarsToAddOrRemove[j]) | ||
184 | } | 203 | } | ||
185 | } | 204 | } | ||
186 | 205 | | |||
187 | function movePlusStars() { | 206 | function movePlusStars() { | ||
188 | for(var j=0; j<3; j++) { | 207 | for(var j = 0; j < 3; j++) { | ||
189 | items.repeatersList[1].itemAt(j).moveStars() | 208 | items.repeatersList[1].itemAt(j).moveStars() | ||
190 | } | 209 | } | ||
191 | } | 210 | } | ||
192 | 211 | | |||
193 | // Function called everytime the first animation ends | 212 | // Function called everytime the first animation ends | ||
194 | function animation1Finished(barGroupIndex) { | 213 | function animation1Finished(barGroupIndex) { | ||
195 | animationCount++ | 214 | animationCount++ | ||
196 | if(barGroupIndex == 0) { | 215 | if(barGroupIndex == 0) { | ||
Show All 17 Lines | 231 | { | |||
214 | if(animationCount === nbStarsToAddOrRemove[0] + | 233 | if(animationCount === nbStarsToAddOrRemove[0] + | ||
215 | nbStarsToAddOrRemove[1] + nbStarsToAddOrRemove[2]) { | 234 | nbStarsToAddOrRemove[1] + nbStarsToAddOrRemove[2]) { | ||
216 | animationCount = 0 | 235 | animationCount = 0 | ||
217 | userGuessNumberState() | 236 | userGuessNumberState() | ||
218 | } | 237 | } | ||
219 | } | 238 | } | ||
220 | 239 | | |||
221 | function userGuessNumberState() { | 240 | function userGuessNumberState() { | ||
222 | for(var i=0; i<3; i++) { | 241 | for(var i = 0; i < 3; i++) { | ||
223 | if(numberOfStars[i] + nbStarsToAddOrRemove[i]) | 242 | if(numberOfStars[i] + nbStarsToAddOrRemove[i]) | ||
224 | items.repeatersList[2].itemAt(i).authorizeClick = true | 243 | items.repeatersList[2].itemAt(i).authorizeClick = true | ||
225 | } | 244 | } | ||
226 | magicHat.state = "GuessNumber" | 245 | magicHat.state = "GuessNumber" | ||
227 | } | 246 | } | ||
228 | 247 | | |||
229 | function getRandomInt(min, max) { | 248 | function getRandomInt(min, max) { | ||
230 | return Math.floor(Math.random() * (max - min + 1) + min); | 249 | return Math.floor(Math.random() * (max - min + 1) + min); | ||
231 | } | 250 | } |
Please improve the naming of those var.