# Membuat game menggunakan event
Pernahkah Anda bertanya-tanya bagaimana situs web tahu saat Anda mengklik tombol atau mengetik di kotak teks? Itulah keajaiban pemrograman berbasis event! Cara terbaik untuk mempelajari keterampilan penting ini adalah dengan membangun sesuatu yang berguna - sebuah game kecepatan mengetik yang merespons setiap ketikan yang Anda lakukan.
Anda akan melihat secara langsung bagaimana browser web "berbicara" dengan kode JavaScript Anda. Setiap kali Anda mengklik, mengetik, atau menggerakkan mouse, browser mengirimkan pesan kecil (kami menyebutnya event) ke kode Anda, dan Anda yang memutuskan bagaimana meresponsnya!
Saat kita selesai, Anda akan memiliki game mengetik sungguhan yang melacak kecepatan dan akurasi Anda. Yang lebih penting, Anda akan memahami konsep dasar yang mendukung setiap situs web interaktif yang pernah Anda gunakan. Mari kita mulai!
## Kuis Pra-Kuliah
[Kuis pra-kuliah](https://ff-quizzes.netlify.app/web/quiz/21)
## Pemrograman berbasis event
Pikirkan tentang aplikasi atau situs web favorit Anda - apa yang membuatnya terasa hidup dan responsif? Semuanya tentang bagaimana ia merespons apa yang Anda lakukan! Setiap ketukan, klik, gesekan, atau ketikan menciptakan apa yang kita sebut "event," dan di situlah keajaiban pengembangan web terjadi.
Inilah yang membuat pemrograman untuk web begitu menarik: kita tidak pernah tahu kapan seseorang akan mengklik tombol itu atau mulai mengetik di kotak teks. Mereka mungkin mengklik segera, menunggu lima menit, atau mungkin tidak pernah mengklik sama sekali! Ketidakpastian ini berarti kita perlu berpikir berbeda tentang bagaimana kita menulis kode kita.
Alih-alih menulis kode yang berjalan dari atas ke bawah seperti resep, kita menulis kode yang duduk dengan sabar menunggu sesuatu terjadi. Ini mirip dengan bagaimana operator telegraf di tahun 1800-an akan duduk di dekat mesin mereka, siap merespons saat pesan datang melalui kabel.
Jadi, apa sebenarnya "event" itu? Sederhananya, itu adalah sesuatu yang terjadi! Ketika Anda mengklik tombol - itu adalah event. Ketika Anda mengetik huruf - itu adalah event. Ketika Anda menggerakkan mouse - itu adalah event lainnya.
Pemrograman berbasis event memungkinkan kita mengatur kode kita untuk mendengarkan dan merespons. Kita membuat fungsi khusus yang disebut **event listener** yang menunggu dengan sabar untuk hal-hal tertentu terjadi, lalu bertindak saat itu terjadi.
Pikirkan event listener seperti memiliki bel pintu untuk kode Anda. Anda mengatur bel pintu (`addEventListener()`), memberitahunya suara apa yang harus didengarkan (seperti 'klik' atau 'keypress'), dan kemudian menentukan apa yang harus terjadi saat seseorang menekannya (fungsi khusus Anda).
**Begini cara kerja event listener:**
- **Mendengarkan** tindakan pengguna tertentu seperti klik, ketikan, atau gerakan mouse
- **Menjalankan** kode khusus Anda saat event yang ditentukan terjadi
- **Merespons** interaksi pengguna secara langsung, menciptakan pengalaman yang mulus
- **Menangani** beberapa event pada elemen yang sama menggunakan listener yang berbeda
> **NOTE:** Perlu dicatat bahwa ada banyak cara untuk membuat event listener. Anda dapat menggunakan fungsi anonim, atau membuat fungsi bernama. Anda dapat menggunakan berbagai pintasan, seperti mengatur properti `click`, atau menggunakan `addEventListener()`. Dalam latihan kita, kita akan fokus pada `addEventListener()` dan fungsi anonim, karena ini adalah teknik yang paling umum digunakan oleh pengembang web. Ini juga yang paling fleksibel, karena `addEventListener()` bekerja untuk semua event, dan nama event dapat diberikan sebagai parameter.
### Event umum
Meskipun browser web menawarkan puluhan event berbeda yang dapat Anda dengarkan, sebagian besar aplikasi interaktif hanya bergantung pada beberapa event penting. Memahami event inti ini akan memberi Anda dasar untuk membangun interaksi pengguna yang canggih.
Ada [puluhan event](https://developer.mozilla.org/docs/Web/Events) yang tersedia untuk Anda dengarkan saat membuat aplikasi. Pada dasarnya, apa pun yang dilakukan pengguna di halaman akan memicu event, yang memberi Anda banyak kekuatan untuk memastikan mereka mendapatkan pengalaman yang Anda inginkan. Untungnya, Anda biasanya hanya membutuhkan sedikit event. Berikut beberapa event umum (termasuk dua yang akan kita gunakan saat membuat game kita):
| Event | Deskripsi | Penggunaan Umum |
|-------|-----------|----------------|
| `click` | Pengguna mengklik sesuatu | Tombol, tautan, elemen interaktif |
| `contextmenu` | Pengguna mengklik tombol mouse kanan | Menu klik kanan khusus |
| `select` | Pengguna menyorot teks | Pengeditan teks, operasi salin |
| `input` | Pengguna memasukkan teks | Validasi formulir, pencarian real-time |
**Memahami jenis event ini:**
- **Memicu** saat pengguna berinteraksi dengan elemen tertentu di halaman Anda
- **Memberikan** informasi rinci tentang tindakan pengguna melalui objek event
- **Memungkinkan** Anda membuat aplikasi web yang responsif dan interaktif
- **Bekerja** secara konsisten di berbagai browser dan perangkat
## Membuat game
Sekarang setelah Anda memahami cara kerja event, mari kita praktikkan pengetahuan itu dengan membangun sesuatu yang berguna. Kita akan membuat game kecepatan mengetik yang menunjukkan penanganan event sambil membantu Anda mengembangkan keterampilan penting sebagai pengembang.
Kita akan membuat game untuk mengeksplorasi cara kerja event di JavaScript. Game kita akan menguji keterampilan mengetik pemain, yang merupakan salah satu keterampilan yang paling diremehkan yang harus dimiliki semua pengembang. Fakta menarik: tata letak keyboard QWERTY yang kita gunakan saat ini sebenarnya dirancang pada tahun 1870-an untuk mesin tik - dan keterampilan mengetik yang baik masih sama berharganya bagi programmer hingga saat ini! Alur umum game akan terlihat seperti ini:
```mermaid
flowchart TD
A[Player clicks Start] --> B[Random quote displays]
B --> C[Player types in textbox]
C --> D{Word complete?}
D -->|Yes| E[Highlight next word]
D -->|No| F{Correct so far?}
F -->|Yes| G[Keep normal styling]
F -->|No| H[Show error styling]
E --> I{Quote complete?}
I -->|No| C
I -->|Yes| J[Show success message with time]
G --> C
H --> C
```
**Begini cara kerja game kita:**
- **Dimulai** saat pemain mengklik tombol mulai dan menampilkan kutipan acak
- **Melacak** kemajuan mengetik pemain kata demi kata secara real-time
- **Menyoroti** kata saat ini untuk memandu fokus pemain
- **Memberikan** umpan balik visual langsung untuk kesalahan mengetik
- **Menghitung** dan menampilkan total waktu saat kutipan selesai
Mari kita bangun game kita, dan pelajari tentang event!
### Struktur file
Sebelum kita mulai coding, mari kita atur! Memiliki struktur file yang rapi sejak awal akan menghemat banyak waktu dan membuat proyek Anda lebih profesional. 😊
Kita akan membuatnya sederhana dengan hanya tiga file: `index.html` untuk struktur halaman kita, `script.js` untuk semua logika game kita, dan `style.css` untuk membuat semuanya terlihat menarik. Ini adalah trio klasik yang mendukung sebagian besar web!
**Buat folder baru untuk pekerjaan Anda dengan membuka konsol atau jendela terminal dan menjalankan perintah berikut:**
```bash
# Linux or macOS
mkdir typing-game && cd typing-game
# Windows
md typing-game && cd typing-game
```
**Begini cara kerja perintah ini:**
- **Membuat** direktori baru bernama `typing-game` untuk file proyek Anda
- **Masuk** ke direktori yang baru dibuat secara otomatis
- **Menyiapkan** ruang kerja yang bersih untuk pengembangan game Anda
**Buka Visual Studio Code:**
```bash
code .
```
**Perintah ini:**
- **Meluncurkan** Visual Studio Code di direktori saat ini
- **Membuka** folder proyek Anda di editor
- **Memberikan** akses ke semua alat pengembangan yang Anda butuhkan
**Tambahkan tiga file ke folder di Visual Studio Code dengan nama berikut:**
- `index.html` - Berisi struktur dan konten game Anda
- `script.js` - Menangani semua logika game dan event listener
- `style.css` - Mendefinisikan tampilan visual dan gaya
## Membuat antarmuka pengguna
Sekarang mari kita bangun panggung tempat semua aksi game kita akan berlangsung! Pikirkan ini seperti merancang panel kontrol untuk pesawat luar angkasa - kita perlu memastikan semua yang dibutuhkan pemain ada di tempat yang mereka harapkan.
Mari kita tentukan apa yang sebenarnya dibutuhkan game kita. Jika Anda bermain game mengetik, apa yang ingin Anda lihat di layar? Berikut yang kita butuhkan:
| Elemen UI | Tujuan | Elemen HTML |
|-----------|--------|-------------|
| Tampilan Kutipan | Menampilkan teks untuk diketik | `
` dengan `id="quote"` |
| Area Pesan | Menampilkan status dan pesan keberhasilan | `
` dengan `id="message"` |
| Input Teks | Tempat pemain mengetik kutipan | `` dengan `id="typed-value"` |
| Tombol Mulai | Memulai game | `