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 coffieients = [] | ||||
37 | var answerCofficients = [] | ||||
38 | var coefficientsNeeded = false | ||||
36 | 39 | | |||
37 | function start(items_, mode_) { | 40 | function start(items_, mode_) { | ||
38 | items = items_ | 41 | items = items_ | ||
39 | mode = mode_ | 42 | mode = mode_ | ||
40 | magicHat = items.hat | 43 | magicHat = items.hat | ||
41 | currentLevel = 0 | 44 | currentLevel = 0 | ||
45 | numberOfLevel = items.levels.length | ||||
42 | initLevel() | 46 | initLevel() | ||
43 | } | 47 | } | ||
44 | 48 | | |||
45 | function stop() { | 49 | function stop() { | ||
46 | } | 50 | } | ||
47 | 51 | | |||
48 | function initLevel() { | 52 | function initLevel() { | ||
49 | items.bar.level = currentLevel + 1 | 53 | items.bar.level = currentLevel + 1 | ||
50 | magicHat.state = "NormalPosition" | 54 | magicHat.state = "NormalPosition" | ||
51 | numberOfStars = new Array(0, 0, 0) | 55 | numberOfStars = new Array(0, 0, 0) | ||
52 | numberOfUserStars = new Array(0, 0, 0) | 56 | numberOfUserStars = new Array(0, 0, 0) | ||
53 | nbStarsToAddOrRemove = new Array(0, 0, 0) | 57 | nbStarsToAddOrRemove = new Array(0, 0, 0) | ||
54 | nbStarsToCount = new Array(0, 0, 0) | 58 | nbStarsToCount = new Array(0, 0, 0) | ||
55 | animationCount = 0 | 59 | animationCount = 0 | ||
56 | 60 | | |||
57 | if(currentLevel > 0) { | 61 | if(currentLevel > 0) { | ||
58 | items.introductionText.visible = false | 62 | items.introductionText.visible = false | ||
59 | } else { | 63 | } else { | ||
60 | items.introductionText.visible = true | 64 | items.introductionText.visible = true | ||
61 | } | 65 | } | ||
62 | 66 | coefficientsNeeded = items.range / 30 <= 1 ? false : true | |||
63 | for(var j=0; j<3; j++) { | 67 | for(var j=0; j<3; j++) { | ||
64 | items.repeatersList[0].itemAt(j).initStars() | 68 | items.repeatersList[0].itemAt(j).initStars() | ||
65 | items.repeatersList[1].itemAt(j).initStars() | 69 | items.repeatersList[1].itemAt(j).initStars() | ||
66 | items.repeatersList[2].itemAt(j).resetStars() | 70 | items.repeatersList[2].itemAt(j).resetStars() | ||
67 | } | 71 | } | ||
68 | 72 | if(!coefficientsNeeded) { | |||
69 | var maxValue = mode === "minus" ? 10 : 9 | 73 | coffieients[0] = coffieients[1] = coffieients[2] = 1; | ||
70 | switch(currentLevel) { | 74 | answerCofficients[0] = answerCofficients[1] = answerCofficients[2] = 1; | ||
71 | case 0: numberOfStars[0] = getRandomInt(2,4) | 75 | setCoefficientVisibility(false) | ||
72 | break; | 76 | setWantedColor() | ||
73 | case 1: numberOfStars[0] = getRandomInt(2,6) | 77 | } else { | ||
74 | break; | 78 | for(var i = 0; i < 3; i++) | ||
75 | case 2: numberOfStars[0] = getRandomInt(2,maxValue) | 79 | coffieients[i] = Math.round(items.levels[currentLevel].maxStars[i] / 10); | ||
76 | break; | 80 | answerCofficients[0] = items.range / 100; | ||
77 | case 3: numberOfStars[0] = getRandomInt(2,5) | 81 | answerCofficients[1] = items.range / 20; | ||
78 | numberOfStars[1] = getRandomInt(2,5) | 82 | answerCofficients[2] = items.range / 10; | ||
79 | break; | 83 | setCoefficientVisibility(true) | ||
80 | case 4: numberOfStars[0] = getRandomInt(2,8) | 84 | setWantedColor("1") | ||
81 | numberOfStars[1] = getRandomInt(2,8) | 85 | } | ||
82 | break; | 86 | var subtractor = mode === "minus" ? 0 : 1 | ||
83 | case 5: numberOfStars[0] = getRandomInt(2,maxValue) | 87 | numberOfStars[0] = items.levels[currentLevel].maxStars[0] > 0 ? getRandomInt(items.levels[currentLevel].minStars[0], (items.levels[currentLevel].maxStars[0] / coffieients[0]) - subtractor) : 0 | ||
84 | numberOfStars[1] = getRandomInt(2,maxValue) | 88 | numberOfStars[1] = items.levels[currentLevel].maxStars[1] > 0 ? getRandomInt(items.levels[currentLevel].minStars[1], (items.levels[currentLevel].maxStars[1] / coffieients[1]) - subtractor) : 0 | ||
85 | break; | 89 | numberOfStars[2] = items.levels[currentLevel].maxStars[2] > 0 ? getRandomInt(items.levels[currentLevel].minStars[2], (items.levels[currentLevel].maxStars[2] / coffieients[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 | 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 = coffieients[i] | ||||
106 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | 94 | items.repeatersList[1].itemAt(i).nbStarsOn = 0 | ||
95 | items.repeatersList[1].itemAt(i).coefficient = coffieients[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 = answerCofficients[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]) | ||
Show All 13 Lines | |||||
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 | items.repeatersList[0].itemAt(i).coefficientVisible = visibility | ||||
131 | items.repeatersList[1].itemAt(i).coefficientVisible = visibility | ||||
132 | items.repeatersList[2].itemAt(i).coefficientVisible = visibility | ||||
133 | items.repeatersList[0].itemAt(i).maxRange = items.range.toString() | ||||
134 | items.repeatersList[1].itemAt(i).maxRange = items.range.toString() | ||||
135 | items.repeatersList[2].itemAt(i).maxRange = items.range.toString() | ||||
136 | } | ||||
137 | } | ||||
138 | | ||||
139 | function setWantedColor(colorValue) { | ||||
140 | if(colorValue != null) { | ||||
141 | for(var i=0; i<3; i++) { | ||||
142 | items.repeatersList[0].itemAt(i).starsColor = colorValue | ||||
143 | items.repeatersList[1].itemAt(i).starsColor = colorValue | ||||
144 | items.repeatersList[2].itemAt(i).starsColor = colorValue | ||||
145 | } | ||||
146 | } | ||||
147 | } | ||||
148 | | ||||
138 | function userClickedAStar(barIndex,state) { | 149 | function userClickedAStar(barIndex,state) { | ||
139 | if(state) | 150 | if(state) | ||
140 | numberOfUserStars[barIndex]++ | 151 | numberOfUserStars[barIndex]++ | ||
141 | else | 152 | else | ||
142 | numberOfUserStars[barIndex]-- | 153 | numberOfUserStars[barIndex]-- | ||
143 | } | 154 | } | ||
144 | 155 | | |||
145 | function verifyAnswer() { | 156 | function verifyAnswer() { | ||
157 | if(items.range / 30 <= 1) { | ||||
146 | if(numberOfUserStars[0] === nbStarsToCount[0] && | 158 | if(numberOfUserStars[0] === nbStarsToCount[0] && | ||
147 | numberOfUserStars[1] === nbStarsToCount[1] && | 159 | numberOfUserStars[1] === nbStarsToCount[1] && | ||
148 | numberOfUserStars[2] === nbStarsToCount[2]) { | 160 | numberOfUserStars[2] === nbStarsToCount[2]) { | ||
149 | items.bonus.good("flower") | 161 | items.bonus.good("flower") | ||
150 | } else { | 162 | } else { | ||
151 | items.bonus.bad("flower") | 163 | items.bonus.bad("flower") | ||
152 | } | 164 | } | ||
165 | } else { | ||||
166 | var userStars = numberOfUserStars[0] * answerCofficients[0] + numberOfUserStars[1] * answerCofficients[1] + | ||||
167 | numberOfUserStars[2] * answerCofficients[2]; | ||||
168 | var toBeStars = nbStarsToCount[0] * coffieients[0] + nbStarsToCount[1] * coffieients[1] + | ||||
169 | nbStarsToCount[2] * coffieients[2]; | ||||
170 | if( userStars == toBeStars) | ||||
171 | items.bonus.good("flower") | ||||
172 | else | ||||
173 | items.bonus.bad("flower") | ||||
174 | } | ||||
153 | } | 175 | } | ||
154 | 176 | | |||
155 | function nextLevel() { | 177 | function nextLevel() { | ||
156 | if(numberOfLevel <= ++currentLevel ) { | 178 | if(numberOfLevel <= ++currentLevel ) { | ||
157 | currentLevel = 0 | 179 | currentLevel = 0 | ||
158 | } | 180 | } | ||
159 | initLevel(); | 181 | initLevel(); | ||
160 | } | 182 | } | ||
▲ Show 20 Lines • Show All 71 Lines • Show Last 20 Lines |