1. Pembuka: Pernah Coba Tantang Diri Sendiri Berhenti di 3 Detik?
Pernah nggak, main game yang kelihatannya simpel, tapi ternyata bikin gemes sendiri? Nah, di artikel (dan video) ini, kita bikin game bernama Time Race — kamu cuma perlu pencet "Start", lalu "Stop" pas udah 3 detik. Tapi percayalah... itu nggak semudah kelihatannya 😆
Kita akan bikin ini pakai HTML, CSS, dan JavaScript, semua dipisah biar lebih rapi dan mudah dipahami, terutama buat kamu yang baru belajar coding.
2. Manfaat: Cocok Buat Latihan Refleks & Ngoding Web
Game ini:
- Melatih refleks kamu dalam menghentikan waktu dengan akurat
- Jadi bahan latihan JavaScript (terutama
setIntervaldan manipulasi waktu)
- Cocok buat portofolio atau tugas belajar pemrograman dasar web
- Sudah menggunakan mode gelap dan desain yang bersih — jadi juga enak dipakai untuk belajar desain UI dasar
3. Penjelasan Kode Time Race (Lengkap dan Bertahap)
Kita pisahkan jadi 3 file: index.html, style.css, dan script.js. Yuk, kita bahas satu per satu!
🔹 Kode HTML (index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Time Race</title>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<div class="container">
<h1>⏱️ Time Race</h1>
<p class="target-time">Target: <span id="target">3.00</span> detik</p>
<div class="timer" id="timer">0.00</div>
<div class="buttons">
<button id="start">Start</button>
<button id="stop" disabled>Stop</button>
</div>
<p id="result"></p>
</div>
<script src="script.js"></script>
</body>
</html>
Penjelasan:
- Elemen utama dibungkus di dalam
<div class="container">
- Ada teks target waktu (
3.00 detik) yang bisa diubah nanti
- Timer utama tampil di
<div id="timer">
- Tombol Start & Stop sudah siap
- Script JS di-load paling bawah agar HTML selesai dirender dulu
🔹 Kode CSS (style.css)
body {
margin: 0;
font-family: 'Segoe UI', sans-serif;
background-color: #121212;
color: #fff;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
}
.container {
text-align: center;
background: #1f1f1f;
padding: 40px;
border-radius: 16px;
box-shadow: 0 0 20px #00ffc3;
width: 320px; /* Ukuran tetap */
min-height: 400px; /* Tinggi minimum agar tidak berubah */
box-sizing: border-box;
}
h1 {
font-size: 2.5rem;
color: #00ffc3;
}
.timer {
font-size: 4rem;
margin: 20px 0;
color: #ffffff;
font-family: monospace;
width: 160px; /* Ukuran tetap */
display: inline-block;
text-align: center;
letter-spacing: 2px;
}
.target-time {
font-size: 1.2rem;
margin-bottom: 10px;
color: #cccccc;
}
.buttons button {
font-size: 1rem;
padding: 12px 30px;
margin: 10px;
border: none;
border-radius: 8px;
background-color: #00ffc3;
color: #000;
cursor: pointer;
transition: 0.3s ease;
}
.buttons button:hover:not(:disabled) {
background-color: #00e6b2;
}
.buttons button:disabled {
opacity: 0.5;
cursor: not-allowed;
}
#result {
font-size: 1.3rem;
margin-top: 20px;
color: #ffcc00;
}
Penjelasan:
- Desain full dark mode (
#121212+#1f1f1f)
- Tombol berwarna terang biar kontras dengan latar
.timerpakai font monospace dan lebar tetap supaya tampilannya stabil
.containerdikunci ukuran minimumnya supaya tidak berubah-ubah saat konten dinamis
🔹 Kode JavaScript (script.js)
let timerDisplay = document.getElementById("timer");
let resultDisplay = document.getElementById("result");
let startBtn = document.getElementById("start");
let stopBtn = document.getElementById("stop");
let target = parseFloat(document.getElementById("target").innerText);
let interval;
let startTime;
startBtn.addEventListener("click", () => {
startTime = Date.now();
timerDisplay.textContent = "0.00";
resultDisplay.textContent = "";
stopBtn.disabled = false;
startBtn.disabled = true;
interval = setInterval(() => {
let elapsed = (Date.now() - startTime) / 1000;
timerDisplay.textContent = elapsed.toFixed(2);
}, 10);
});
stopBtn.addEventListener("click", () => {
clearInterval(interval);
stopBtn.disabled = true;
startBtn.disabled = false;
let finalTime = (Date.now() - startTime) / 1000;
let diff = Math.abs(finalTime - target).toFixed(2);
resultDisplay.textContent = `Waktu kamu: ${finalTime.toFixed(2)} detik — Selisih: ${diff} detik`;
});
Penjelasan:
- Saat "Start" ditekan,
setIntervalakan berjalan setiap 10ms (0.01 detik)
Date.now()dipakai untuk menghitung waktu yang berjalan sejak tombol Start ditekan
- Saat "Stop", kita menghitung selisih waktu aktual dengan target (
3.00 detik)
- Selisih tersebut ditampilkan sebagai skor atau hasil
🎉 Penutup
Game ini sederhana, tapi bisa bikin penasaran dan cocok banget buat latihan JavaScript. Kamu bisa mengembangkan lebih lanjut dengan:
- Tambah level kesulitan (target waktu berubah-ubah)
- Tambah suara saat start/stop
- Simpan skor terbaik dengan
localStorage
Selamat mencoba dan semoga bermanfaat buat kamu yang sedang belajar!
.jpg)
Komentar
Posting Komentar