|
34 | 34 | if (led.getValue() === 1 && htmlState === 'on') isPass = true; |
35 | 35 | }); |
36 | 36 |
|
37 | | - if (isPass) alert("第一關 過關!"); |
| 37 | + if (isPass) alert("第 1 關 過關!"); |
38 | 38 | } |
39 | 39 |
|
40 | 40 | /** |
|
126 | 126 |
|
127 | 127 | if (isPass) { |
128 | 128 | isPassed = true; |
129 | | - alert("第二關 過關!"); |
| 129 | + alert("第 2 關 過關!"); |
130 | 130 | } else { |
131 | 131 | console.log("Stage2 not yet..."); |
132 | 132 | } |
133 | 133 | } |
134 | 134 |
|
135 | 135 | } |
136 | 136 |
|
| 137 | + /** |
| 138 | + * 關卡 3:模擬器中三色 LED 是否有做顏色的不斷變化 |
| 139 | + */ |
137 | 140 | function stage3() { |
138 | 141 | var lightBtn = demoDoc_.getElementById('light'); |
139 | 142 | var isPass = false; |
140 | 143 |
|
141 | 144 | lightBtn.addEventListener('click', function() { |
142 | 145 | if (lightBtn.classList.contains('on')) { |
143 | | - console.log('==> 開始'); |
144 | 146 | setTimeout(checking, 3000); |
145 | 147 | } |
146 | 148 | }); |
|
156 | 158 | colors["[" + r + "," + g + "," + b + "]"] = true; |
157 | 159 | if (Object.keys(colors).length > 1) { |
158 | 160 | isPass = true; |
159 | | - alert('第三關 過關!'); |
| 161 | + alert('第 3 關 過關!'); |
160 | 162 | checkOver(); |
161 | 163 | } |
162 | 164 | }); |
163 | 165 | }); |
164 | | - |
165 | 166 | } |
166 | 167 |
|
167 | 168 | function checkOver() { |
|
173 | 174 |
|
174 | 175 | } |
175 | 176 |
|
| 177 | + /** |
| 178 | + * 關卡 4:點擊按鈕時,是否有完成暫停影片及播放影片的功能,以及長按按鈕來讓影片停止 |
| 179 | + */ |
176 | 180 | function stage4() { |
| 181 | + var demoWin = demoDoc_.defaultView; |
| 182 | + var youtube = demoWin.youtube_; |
| 183 | + var btns = engine_.list().btn; |
| 184 | + var act = void 0; |
| 185 | + var check = [false, false, false]; // 檢查三項,點按鈕,暫停 youtube 及播放 youtube,長按則停止。 |
| 186 | + var isPassed = false; |
| 187 | + var TIMES = 10; |
| 188 | + var times = 0; |
177 | 189 |
|
178 | | - } |
| 190 | + if (!btns.length) { |
| 191 | + return; |
| 192 | + } |
| 193 | + |
| 194 | + btns.forEach(function (btn) { |
| 195 | + btn.setPressHandler(press); |
| 196 | + btn.setSustainedPressHandler(sustainedPress); |
| 197 | + }); |
| 198 | + |
| 199 | + if (youtube) { |
| 200 | + youtube.addEventListener('onStateChange', stageChange); |
| 201 | + } else { |
| 202 | + setTimeout(function aa() { |
| 203 | + times++; |
| 204 | + if (demoWin.youtube_) { |
| 205 | + youtube = demoWin.youtube_; |
| 206 | + youtube.addEventListener('onStateChange', stageChange); |
| 207 | + return; |
| 208 | + } |
| 209 | + |
| 210 | + if (times < TIMES) { |
| 211 | + setTimeout(aa, 1000); |
| 212 | + } |
| 213 | + |
| 214 | + }, 1000); |
| 215 | + } |
| 216 | + |
| 217 | + function press() { |
| 218 | + act = 'press'; |
| 219 | + } |
| 220 | + |
| 221 | + function sustainedPress() { |
| 222 | + act = 'sustainedPress'; |
| 223 | + } |
| 224 | + |
| 225 | + function stageChange(evt) { |
| 226 | + var state = evt.data; |
| 227 | + |
| 228 | + if (act) { |
| 229 | + if (act === 'press' && state === demoWin.YT.PlayerState.PAUSED) check[0] = true; |
| 230 | + if (act === 'press' && state === demoWin.YT.PlayerState.PLAYING) check[1] = true; |
| 231 | + if (act === 'sustainedPress' && state === -1) check[2] = true; |
| 232 | + act = void 0; |
| 233 | + } |
| 234 | + checking(); |
| 235 | + } |
179 | 236 |
|
| 237 | + function checking() { |
| 238 | + if (isPassed) return; |
| 239 | + |
| 240 | + var isPass = check.reduce(function (acc, val) { |
| 241 | + return acc && val; |
| 242 | + }, true); |
| 243 | + |
| 244 | + if (isPass) { |
| 245 | + isPassed = true; |
| 246 | + checkOver(); |
| 247 | + |
| 248 | + setTimeout(function () { |
| 249 | + alert('第 4 關 過關!'); |
| 250 | + }, 1000); |
| 251 | + } |
| 252 | + } |
| 253 | + |
| 254 | + function checkOver() { |
| 255 | + youtube.removeEventListener('onStateChange', stageChange); |
| 256 | + btns.forEach(function (btn) { |
| 257 | + btn.setPressHandler(null); |
| 258 | + btn.setSustainedPressHandler(null); |
| 259 | + }); |
| 260 | + } |
| 261 | + |
| 262 | + } |
180 | 263 |
|
181 | 264 |
|
| 265 | + |
182 | 266 |
|
183 | 267 | Code.stageCheck = { |
184 | 268 | init: init |
|
0 commit comments