實作一個打地鼠的遊戲,有計分/計時功能。
取得元素
設定隨機時間(第28天的範圍公式)
function randomTime(min, max) {
return Math.round(Math.random() * (max - min) + min)
}
設定隨機的地鼠洞
取得 holes
,利用 holes.length
來製造隨機的 index
function randomHole(holes) {
const index = Math.floor(Math.random() * holes.length);
console.log(holes);
console.log(holes.length);
}
把隨機的 index
賦值到地鼠洞
const hole = holes[index]
處理隨機數字不要跟前一個一樣
宣告一個最後的地鼠洞
如果最後一個地鼠洞跟新出來的地鼠洞一樣就在跑一次
if (lastHole === hole) {
return randomHole(holes);
}
不一樣就把新出來的地鼠洞賦值給最後一個地鼠洞
lastHole = hole;
return hole;
地鼠彈出
利用 randomTime
、randomHole
隨機的結果
function peep() {
const time = randomTime(200, 1000);
const hole = randomHole(holes);
console.log(time, hole);
}
把地鼠洞賦予新的 class
hole.classList.add('up');
利用 time
製造隨機時間把 class 移除
setTimeout(() => {
hole.classList.removeClass('up');
},time);
讓地鼠重複彈出
setTimeout(() => {
hole.classList.remove('up');
peep();
}, time);
設定遊戲開始加時間限制
宣告一個計時器到時值為 false
在 func
: peep 中加入如果時間到就停止的判斷
if (timeUp) return;
寫一個 func
: startGame ,設定計時器如果時間到了就把計時器值改為 true
function startGame() {
timeUp = false;
peep();
setTimeout(() => timeUp = true, 10000)
}
製作按鈕觸發
<button onClick="startGame()">Start!</button>
設定點擊到的地鼠
利用 forEach
監聽每個 mole
是否有點擊事件,即觸發 func
: bonk
function bonk(e) {
console.log(e);
}
moles.forEach(mole => mole.addEventListener('click', bonk))
isTrusted**: true
如果 **isTrusted**: true
就加分
宣告一個分數初始值為零
在開始遊戲的 func
: startGame ,把分數歸零
如果 **isTrusted**: true
就加分
if (e.isTrusted) {
score++;
}
加分後要把地鼠移除
this.classList.remove('up'));
使用 textContent
把加分賦值到總分板
scoreBoard.textContent = score;
在開始遊戲的 func
: startGame ,把總分板分數歸零
有興趣也可以看看 alex 大大的版本