Skip to content

Raka-coder/lexicon-timebomb-game

Repository files navigation

Lexicon Timebomb (Game Sambung Kata)

TypeScript React Node.js Socket.IO Vite Hono Tailwind React Query

Vercel Railway

Bahasa Indonesia | English

Lexicon Timebomb adalah game sambung kata multiplayer real-time. Dua pemain bersaing untuk menyusun kata yang dimulai dari huruf terakhir kata sebelumnya. Jika waktu habis, pemain kalah!

Preview

Preview Game

Fitur Utama

  • Multiplayer Real-Time — Dua pemain bermain bersamaan via WebSocket
  • Validasi KBBI — Setiap kata divalidasi dengan Kamus Besar Bahasa Indonesia
  • Timer Bom — Countdown 15 detik dengan efek visual dinamis
  • Sistem Skor — Skor real-time untuk setiap kata valid
  • Efek Suara — Procedural sound via Web Audio API (tanpa file eksternal)
  • Responsif — Optimal di desktop dan mobile

Teknologi

Backend

  • Hono — Framework web modern dan cepat
  • Socket.IO — Komunikasi real-time
  • TypeScript — Type safety
  • Bun — JavaScript runtime

Frontend

  • React — Library UI
  • Vite — Build tool
  • TypeScript — Type safety
  • Tailwind CSS — Utility-first styling
  • shadcn/ui — Komponen UI siap pakai
  • Zustand — State management

Cara Menjalankan

Prasyarat

  • Node.js v18+ atau Bun
  • npm atau bun

Instalasi

# Clone repository
git clone <repository-url>
cd root

# Install dependencies backend
cd backend && bun install   # atau: npm install
cd ../frontend && npm install   # atau: bun install

Setup Environment

Salin .env.example ke .env di masing-masing direktori:

# Backend
cp backend/.env.example backend/.env

# Frontend
cp frontend/.env.example frontend/.env

Sesuaikan nilai variabel di backend/.env dan frontend/.env jika diperlukan.

Jalankan Backend

cd backend
bun run index.ts / bun run dev

Backend berjalan di http://localhost:3001

Jalankan Frontend

cd frontend
npm run dev / bun run dev

Frontend berjalan di http://localhost:5173

Cara Bermain

  1. Buat Room — Klik "Host", masukkan nama, dapatkan kode room
  2. Bagikan Kode — Sebarkan kode room ke teman
  3. Gabung Room — Teman masukkan kode dan nama untuk bergabung
  4. Mulai Game — Host memulai jika sudah ada 2 pemain
  5. Sambung Kata — Pemain bergantian menulis kata berawalan huruf terakhir kata sebelumnya
  6. Batas Waktu — Setiap giliran terbatas 15 detik
  7. Game Over — Pemain yang tidak bisa menjawab dalam waktu yang ditentukan kalah

Aturan

  • Kata minimal 3 karakter
  • Kata harus valid menurut KBBI
  • Kata tidak boleh dipakai dua kali
  • Kata harus diawali dengan huruf terakhir kata sebelumnya

Struktur Proyek

root/
├── backend/                 # Server backend
│   ├── src/
│   │   ├── socket/        # Socket.IO handlers
│   │   ├── game/          # Game logic & timer
│   │   ├── routes/        # API routes
│   │   ├── dictionary/    # Validasi KBBI
│   │   └── data/          # Daftar kata KBBI
│   └── package.json
├── frontend/              # Client frontend
│   ├── src/
│   │   ├── components/    # UI components
│   │   ├── hooks/         # Custom hooks
│   │   ├── stores/        # Zustand stores
│   │   └── lib/           # Utilities
│   └── package.json
├── docs/                  # Dokumentasi
└── README.md              # File ini

API Endpoint

Health Check

GET /api/health

Cek Room

GET /api/room/:code

Validasi Kata

GET /api/dictionary/check/:word

Socket Events

Client → Server

  • CREATE_ROOM — Buat room baru
  • JOIN_ROOM — Gabung room
  • START_GAME — Mulai game
  • SUBMIT_WORD — Kirim kata

Server → Client

  • ROOM_CREATED — Room berhasil dibuat
  • PLAYER_JOINED — Pemain baru bergabung
  • TURN_START — Giliran dimulai
  • WORD_VALID — Kata valid
  • WORD_INVALID — Kata tidak valid
  • TIMER_SYNC — Sinkronisasi timer
  • GAME_OVER — Game selesai

Deployment

Backend ke Railway

cd backend
railway init
railway up

Frontend ke Vercel

cd frontend
vercel

Kontribusi

Pull request diterima untuk perbaikan dan peningkatan.

Lisensi

Proyek ini dibuat untuk tugas UAS Web Programming.

About

Lexicon Timebomb adalah game adu kosakata multi-pemain (multiplayer) secara real-time. Pemain ditantang untuk menyambung kata berdasarkan huruf terakhir dari kata sebelumnya, sebelum bom waktu meledak!

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages