31 poin oleh GN⁺ 2023-11-26 | 1 komentar | Bagikan ke WhatsApp

Menemukan Kembali Keseruan lewat Coding: Mengatasi Burnout dengan Pengembangan Game

  • Keluhan yang sering terlihat di komunitas developer: gairah terhadap coding mulai hilang
  • Tip untuk mengatasi burnout: buat game sendiri agar bisa kembali menikmati coding
  • Berbagi pengalaman pribadi yang jatuh cinta pada pemrograman lewat pengembangan game
  • Merekomendasikan pengembangan game menggunakan bahasa Go dan library Ebitengine

Prinsip Dasar Pengembangan Game

  • Mirip seperti film, game adalah kumpulan gambar (frame) yang ditampilkan cepat secara berurutan
  • Game menghasilkan gambar secara real-time dan mengubah frame berikutnya sesuai input pengguna
  • Pada dasarnya game adalah loop tak berujung yang berulang antara menggambar gambar dan memperbarui logika

Pengaturan Proyek

  • Membuat modul Go dan menambahkan library Ebitengine
  • Menjalankan jendela kosong dengan implementasi minimum dari antarmuka game

Memuat Aset

  • Disarankan menggunakan programmer art atau memanfaatkan aset gratis
  • Memuat aset ke dalam kode menggunakan paket embed

Menggambar Gambar

  • Semua pekerjaan menggambar dilakukan di dalam metode Draw
  • Menggunakan metode DrawImage dari ebiten.Image untuk menggambar gambar di atas gambar lain
  • Mengatur posisi, rotasi, dan skala gambar melalui struct DrawImageOptions

Logika Game

  • Struct Game menyimpan status game dan mengubah status melalui metode Update
  • Sebagai contoh, posisi pemain disimpan sebagai vektor (X, Y)

Pergerakan

  • Mengimplementasikan pergerakan dengan memperbarui posisi pemain di metode Update
  • Mengubah posisi pemain sesuai input keyboard

Timer

  • Mengimplementasikan timer untuk mengubah logika sesuai waktu di dalam game
  • Menggunakan struct Timer untuk memicu event pada interval waktu tertentu

Objek Game

  • Mengelola objek game seperti pemain dengan cara enkapsulasi
  • Setiap objek memiliki metode Update dan Draw sendiri

Pembuatan Objek

  • Membuat objek meteor dan memunculkannya dari tepi layar
  • Struct Game melacak objek meteor

Menembakkan Peluru

  • Mengimplementasikan logika menembakkan peluru dan timer cooldown
  • Player membuat peluru dan Game melacaknya

Deteksi Tabrakan

  • Mengimplementasikan struct Rect dan metode Collider() untuk deteksi tabrakan
  • Memeriksa tabrakan antarobjek di Update milik game

Opini GN⁺

Hal terpenting dari tulisan ini adalah bahwa artikel ini menunjukkan cara bagi developer untuk mengatasi burnout dan mendapatkan kembali gairah terhadap coding. Pengembangan game memberi kesempatan untuk melatih keterampilan coding melalui proyek yang kreatif dan menyenangkan, sekaligus mempelajari bahasa atau library baru. Tulisan ini memberi inspirasi kepada developer untuk kembali menikmati coding sebagai hobi, sekaligus membangkitkan minat dengan menjelaskan pendekatan dasar pengembangan game menggunakan bahasa Go dan library Ebitengine.

1 komentar

 
GN⁺ 2023-11-26
Komentar Hacker News
  • Pengguna pertama lebih suka menulis kembang api atau simulasi partikel sederhana saat mempelajari bahasa baru atau API grafis untuk menguji performa. Ketika bereksperimen dengan Go dan Ebitengine pada 2021, ia sangat terkesan dengan performa yang mengejutkan dan kemudahan penggunaan yang mampu menggerakkan banyak piksel pada 60fps.
  • Pengguna kedua tahun lalu mengembangkan game menggunakan bahasa Go dengan g3n-engine. Ia memilihnya karena menyukai dan ingin mempelajari Go, dan setelah pengalaman sebelumnya dalam pengembangan game 2D, ia ingin mencoba pekerjaan 3D sehingga memilih g3n-engine. Membuat game adalah pengalaman yang jauh lebih menantang dan memuaskan dibanding pekerjaan berbayar, dan selalu ada hal baru untuk dipelajari.
  • Pengguna ketiga menyebut API Ebiten untuk bahasa Go sangat bagus dan dapat menjadi inspirasi dalam desain API. Ia juga menggunakan kompiler kustom yang mengubah Go ke C++ untuk meningkatkan performa dalam pengembangan game, mengakses API C/C++, dan memberikan performa yang baik di WebAssembly. Kompiler ini juga mencakup eksperimen untuk menghasilkan GLSL dari kode Go.
  • Pengguna keempat bukan pengembang Go, tetapi telah lama mengikuti seorang YouTuber/streamer Twitch yang membuat game dengan Go. Streamer tersebut sedang mengembangkan MMO kecil dengan Go, dan membuat versi web menggunakan OpenGL dan WASM. Meski ia memahami bahwa garbage collection Go sangat solid, banyak orang tetap bertanya, "kenapa membuatnya dengan Go?".
  • Pengguna kelima hanya menanggapi bagian awal artikel, dan menyarankan bahwa jika seseorang mengalami burnout seperti yang dijelaskan penulis, lebih baik mengembangkan minat daripada "menaklukkan kembali" hobi. Ini bisa menjadi tanda bahwa otak sedang mengalami stagnasi, dan meskipun tidak harus berbeda dari pemrograman, mungkin ini saat yang tepat untuk mendalami teori ilmu komputer.
  • Pengguna keenam, sebagai pengguna Ebitengine selama beberapa tahun, mengatakan pengalamannya memuaskan. Jika ingin melihat source game yang dibuat dengan Ebitengine, ia merekomendasikan untuk memeriksa daftar awesome-ebitengine. Semua game yang tercantum di profil itch.io miliknya dibuat dengan Ebitengine dan semuanya open source.
  • Pengguna ketujuh sedang mengembangkan game menggunakan Ebitengine dan merasa pengalamannya menyegarkan.
  • Pengguna kedelapan mempertanyakan apakah Go adalah platform yang cocok untuk menulis game besar, dan apakah Go memiliki cukup library serta performa untuk membenarkan pemakaiannya dibanding C#.
  • Pengguna kesembilan penasaran apakah Go cocok untuk pembuatan game karena konsep goroutine-nya, dan berpikir untuk mencobanya suatu hari nanti.
  • Terakhir, ada penyebutan tentang game berbasis Ebitengine, dan ditunjukkan bahwa kalimat tentang "seperti apa contoh komponen Sprite bisa terlihat" terpotong sehingga perlu diperbaiki.