Kalau kamu lagi belajar coding dan pengen bikin proyek web yang seru tapi tetap simpel, game ini cocok banget buat kamu! Di artikel ini, kita akan bareng-bareng bikin game Susun Kata dengan tampilan mode gelap dan fitur level bertahap. Kamu bisa seret huruf-huruf acak dan coba menyusunnya jadi kata yang benar. Seru ‘kan?
✨ Apa Manfaat Proyek Ini?
Selain seru dimainkan, game ini cocok banget buat:
- Melatih logika dasar JavaScript
- Belajar drag and drop di web
- Menggabungkan HTML, CSS, dan JavaScript dalam satu proyek nyata
- Bahan portofolio coding-mu!
Kalau kamu masih pemula, proyek ini akan bantu kamu ngerti bagaimana elemen web saling terhubung.
🧱 1. Kode HTML: Struktur Utama Halaman
HTML bertugas membentuk kerangka dasar game. Kita siapkan bagian judul, petunjuk, area huruf, tombol aksi, dan hasil jawaban.
📄 Kode HTML
<!DOCTYPE html>
<html lang="id">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title>Game Susun Kata</title>
<link rel="stylesheet" href="style.css"/>
</head>
<body>
<div class="container">
<h1>Susun Kata</h1>
<p id="level">Level 1</p>
<p class="hint" id="hint"></p>
<div id="letter-container"></div>
<button id="action-btn" onclick="checkAnswer()">Cek Jawaban</button>
<p id="result"></p>
</div>
<script src="script.js"></script>
</body>
</html>
📝 Penjelasan:
#letter-container: tempat huruf-huruf yang bisa di-drag.
#action-btn: tombol untuk mengecek jawaban.
#hint: menampilkan petunjuk sesuai level.
🎨 2. Kode CSS: Tampilan Mode Gelap
CSS akan membuat tampilan game jadi kece dengan mode gelap, warna neon, dan tata letak yang rapi.
🎨 Kode CSS
body {
background-color: #121212;
color: #fff;
font-family: 'Segoe UI', sans-serif;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
}
.container {
text-align: center;
background: #1e1e1e;
padding: 30px;
border-radius: 15px;
box-shadow: 0 0 15px #00ffe1;
max-width: 400px;
}
#letter-container {
display: flex;
justify-content: center;
flex-wrap: wrap;
gap: 10px;
margin: 20px 0;
}
.letter {
padding: 15px 20px;
background-color: #292929;
border: 2px solid #00ffe1;
border-radius: 10px;
cursor: grab;
font-size: 24px;
user-select: none;
}
button {
padding: 10px 20px;
background-color: #00ffe1;
color: #000;
border: none;
border-radius: 8px;
font-size: 16px;
cursor: pointer;
transition: 0.3s;
}
button:hover {
background-color: #00bfa6;
}
#result {
margin-top: 15px;
font-size: 18px;
}
#level {
font-weight: bold;
margin: 10px 0;
}
📝 Penjelasan:
bodydan.container: atur tata letak dan warna dasar.
.letter: gaya untuk setiap huruf.
button: desain tombol interaktif.
⚙️ 3. Kode JavaScript: Logika Permainan
JavaScript adalah otak dari game ini. Ia akan:
- Menampilkan huruf acak
- Mengecek jawaban
- Berpindah ke level berikutnya
- Mengulang dari awal saat game selesai
⚙️ Kode JavaScript
const levels = [
{ word: "kucing", hint: "Nama hewan berkaki empat" },
{ word: "pisang", hint: "Buah kuning melengkung" },
{ word: "bintang", hint: "Bersinar di malam hari" },
{ word: "komputer", hint: "Alat bantu kerja digital" },
{ word: "pelangi", hint: "Muncul setelah hujan, warna-warni" }
];
let currentLevel = 0;
let shuffledLetters = [];
const container = document.getElementById("letter-container");
const hintElement = document.getElementById("hint");
const levelText = document.getElementById("level");
const result = document.getElementById("result");
const actionBtn = document.getElementById("action-btn");
function loadLevel() {
const { word, hint } = levels[currentLevel];
levelText.textContent = `Level ${currentLevel + 1}`;
hintElement.textContent = `Petunjuk: ${hint}`;
shuffledLetters = word.split('').sort(() => Math.random() - 0.5);
renderLetters();
result.textContent = "";
}
function renderLetters() {
container.innerHTML = "";
shuffledLetters.forEach((char, index) => {
const span = document.createElement("div");
span.className = "letter";
span.textContent = char;
span.draggable = true;
span.dataset.index = index;
span.addEventListener("dragstart", dragStart);
span.addEventListener("dragover", dragOver);
span.addEventListener("drop", drop);
container.appendChild(span);
});
}
let draggedIndex;
function dragStart(e) {
draggedIndex = +e.target.dataset.index;
}
function dragOver(e) {
e.preventDefault();
}
function drop(e) {
const targetIndex = +e.target.dataset.index;
[shuffledLetters[draggedIndex], shuffledLetters[targetIndex]] =
[shuffledLetters[targetIndex], shuffledLetters[draggedIndex]];
renderLetters();
}
function checkAnswer() {
const userWord = shuffledLetters.join("");
const correctWord = levels[currentLevel].word;
if (userWord === correctWord) {
result.textContent = "🎉 Benar! Lanjut ke level berikutnya...";
result.style.color = "#00ffe1";
setTimeout(() => {
currentLevel++;
if (currentLevel < levels.length) {
loadLevel();
} else {
showCompletion();
}
}, 1000);
} else {
result.textContent = "❌ Salah, coba lagi!";
result.style.color = "#ff5c5c";
}
}
function showCompletion() {
result.textContent = "🏁 Semua level selesai! Hebat!";
container.innerHTML = "";
hintElement.textContent = "";
levelText.textContent = "";
actionBtn.textContent = "Mulai Lagi";
actionBtn.onclick = restartGame;
}
function restartGame() {
currentLevel = 0;
actionBtn.textContent = "Cek Jawaban";
actionBtn.onclick = checkAnswer;
loadLevel();
}
loadLevel();
📝 Penjelasan:
levels: kumpulan level, kata & petunjuk.
renderLetters(): menampilkan huruf-huruf acak.
checkAnswer(): mengecek apakah kata sudah benar.
showCompletion(): muncul saat semua level selesai.
restartGame(): memulai ulang game dari level pertama.
🧩 Penutup
Proyek ini cocok banget untuk latihan JavaScript dasar, sekaligus jadi game mini yang menyenangkan. Kamu bisa kembangkan lagi dengan:
- Timer
- Skor
- Animasi transisi
- Tambahan level lewat file JSON
Kalau kamu suka, jangan lupa share dan modifikasi sesuai ide kreatifmu ya!
.jpg)
Komentar
Posting Komentar