|
19 | 19 | 'stages/10': stage10, |
20 | 20 | 'stages/11': stage11, |
21 | 21 | 'stages/12': stage12, |
22 | | - 'stages/13': stage13 |
| 22 | + 'stages/13': stage13, |
| 23 | + 'stages/14': stage14 |
23 | 24 | }; |
24 | 25 |
|
25 | 26 | demoDoc_ = demo.contentDocument; |
|
986 | 987 |
|
987 | 988 | } |
988 | 989 |
|
| 990 | + /** |
| 991 | + * 點擊按鈕後,伺服馬達轉 90 度,且網頁互動區也顯示 90,再點擊,則旋轉 0 度,互動區也顯示 0,完成該操作則過關 |
| 992 | + * 做法:點擊按鈕後,做檢查,檢查互動區的值,與伺服馬達旋轉角度是否一致。此外,要檢查二種情況 0, 90 度。 |
| 993 | + */ |
| 994 | + function stage14() { |
| 995 | + var showEl = demoDoc_.querySelector('#show'); |
| 996 | + var btns = engine_.list().btn; |
| 997 | + var servos = engine_.list().servo; |
| 998 | + var check = [false, false]; |
| 999 | + var isPassed = false; |
| 1000 | + var timer; |
| 1001 | + |
| 1002 | + if (!btns.length) return; |
| 1003 | + if (!servos.length) return; |
| 1004 | + |
| 1005 | + btns.forEach(function (btn) { |
| 1006 | + btn.setPressHandler(press); |
| 1007 | + }); |
| 1008 | + |
| 1009 | + function press() { |
| 1010 | + clearTimeout(timer); |
| 1011 | + timer = setTimeout(function () { |
| 1012 | + var demoAngle = parseInt(showEl.textContent); |
| 1013 | + if (demoAngle === 0) checkPoint1(); |
| 1014 | + if (demoAngle === 90) checkPoint2(); |
| 1015 | + checking(); |
| 1016 | + }, 300); |
| 1017 | + } |
| 1018 | + |
| 1019 | + function checkPoint1() { |
| 1020 | + if (check[0]) return; |
| 1021 | + check[0] = servos.some(function (servo) { |
| 1022 | + var angle = servo.getAngle(); |
| 1023 | + return angle === 0 || angle === 5; |
| 1024 | + }); |
| 1025 | + } |
| 1026 | + |
| 1027 | + function checkPoint2() { |
| 1028 | + if (check[1]) return; |
| 1029 | + check[1] = servos.some(function (servo) { |
| 1030 | + var angle = servo.getAngle(); |
| 1031 | + return angle === 90; |
| 1032 | + }); |
| 1033 | + } |
| 1034 | + |
| 1035 | + function checking() { |
| 1036 | + if (isPassed) return; |
| 1037 | + |
| 1038 | + isPassed = check.reduce(function (acc, val) { |
| 1039 | + return acc && val; |
| 1040 | + }, true); |
| 1041 | + |
| 1042 | + if (isPassed) { |
| 1043 | + checkOver(); |
| 1044 | + |
| 1045 | + // 考量畫面有些動畫未完成,所以延遲 1 秒執行 |
| 1046 | + setTimeout(function () { |
| 1047 | + alert('第 14 關 過關!'); |
| 1048 | + }, 1000); |
| 1049 | + } |
| 1050 | + |
| 1051 | + } |
| 1052 | + |
| 1053 | + function checkOver() { |
| 1054 | + btns.forEach(function (btn) { |
| 1055 | + btn.setPressHandler(null); |
| 1056 | + }); |
| 1057 | + } |
| 1058 | + |
| 1059 | + } |
| 1060 | + |
989 | 1061 | Code.stageCheck = { |
990 | 1062 | init: init |
991 | 1063 | }; |
|
0 commit comments