Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 103 additions & 0 deletions 30 - Whack A Mole/changi.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Whack A Mole!</title>
<link
href="https://fonts.googleapis.com/css?family=Amatic+SC:400,700"
rel="stylesheet"
type="text/css"
/>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<h1>Whack-a-mole! <span class="score">0</span></h1>
<button onClick="startGame()">Start!</button>

<div class="game">
<div class="hole hole1">
<div class="mole"></div>
</div>
<div class="hole hole2">
<div class="mole"></div>
</div>
<div class="hole hole3">
<div class="mole"></div>
</div>
<div class="hole hole4">
<div class="mole"></div>
</div>
<div class="hole hole5">
<div class="mole"></div>
</div>
<div class="hole hole6">
<div class="mole"></div>
</div>
</div>

<script>
const holes = document.querySelectorAll(".hole");
const scoreBoard = document.querySelector(".score");
const moles = document.querySelectorAll(".mole");

let lastHole;
let timeup = false;
let score = 0;

function randomTime(min, max) {
return Math.random() * (max - min) + min;
}

function randomHole(holes) {
const idx = Math.floor(Math.random() * holes.length);
const hole = holes[idx];

if (lastHole === hole) {
return randomHole(holes);
}

lastHole = hole;
return hole;
}

function peep() {
const time = randomTime(200, 1000);
const hole = randomHole(holes);

hole.classList.add("up");
setTimeout(() => {
hole.classList.remove("up");

if (!timeup) {
peep();
}
}, time);
}

function startGame() {
scoreBoard.textContent = 0;
timeup = false;
score = 0;
peep();

setTimeout(() => {
timeup = true;
}, 10 * 1000);
}

function bonk(evt) {
if (!evt.isTrusted) {
return;
}

score += 1;
this.classList.remove("up");
scoreBoard.textContent = score;
}

moles.forEach((mole) => {
mole.addEventListener("click", bonk);
});
</script>
</body>
</html>