Bab 1, Deteksi
Tumbukan AABB dan Fisika: Menyelesaikan Game Pong. Di bab ini, kita akan menulis kelas kedua. Walaupun bola dan
pemukul (bat) memiliki karakteristik yang berbeda, kita akan menggunakan
pendekatan yang sama untuk mengenkapsulasi tampilan dan fungsinya ke dalam
kelas Ball, sebagaimana kita lakukan dengan kelas Bat. Setelah itu, kita akan menambahkan penyempurnaan akhir pada game
Pong, termasuk kode untuk deteksi tumbukan dan perhitungan skor. Meskipun
terdengar rumit, SFML akan sangat membantu menyederhanakan prosesnya.
Bab 2, SFML Views:
Memulai Game Zombie Shooter. Dalam proyek
ini, kita akan semakin banyak menggunakan konsep OOP dan memanfaatkannya dengan
lebih kuat. Kita juga akan mempelajari kelas SFML View, yang memungkinkan kita
membagi game ke dalam beberapa lapisan untuk aspek yang berbeda. Dalam proyek
Zombie Shooter, akan ada satu lapisan untuk HUD dan satu lapisan untuk game
utama. Hal ini penting karena dunia game akan terus meluas setiap kali pemain
menyelesaikan satu gelombang zombie. Pada akhirnya, ukuran dunia game akan
lebih besar dari layar, sehingga pemain perlu menggulir tampilan. Dengan View
class, teks HUD akan tetap berada di posisi yang benar tanpa ikut
bergulir bersama latar belakang.
Bab 3, Referensi C++, Sprite Sheet, dan Vertex Array. Pada Bab 4, Loop, Array, Switch, Enumerasi, dan Fungsi – Menerapkan Mekanika Game, kita membahas
tentang scope, yaitu konsep bahwa variabel yang dideklarasikan di dalam fungsi
atau blok kode hanya dapat digunakan di area
tersebut. Dengan pengetahuan C++ yang kita miliki sejauh ini, hal ini bisa
menimbulkan kendala. Misalnya, bagaimana jika kita perlu mengakses beberapa
objek kompleks yang dibutuhkan di dalam fungsi utama? Ini seolah memaksa
seluruh kode berada di fungsi main.
Dalam bab ini, kita akan mempelajari reference di C++, yang memungkinkan kita
bekerja dengan variabel dan objek di luar scope-nya. Selain itu, reference juga
membantu menghindari proses pengiriman objek besar antar fungsi yang cenderung
lambat karena membutuhkan salinan baru setiap kali dilakukan. Dengan pemahaman
baru tentang reference, kita akan mempelajari kelas SFML VertexArray, yang
memungkinkan kita membuat gambar besar yang dapat digambar ke layar dengan
cepat dan efisien menggunakan beberapa bagian dari satu berkas gambar. Di akhir
bab ini, kita akan memiliki latar belakang yang dapat diskalakan, acak, dan
bergulir, yang dibuat menggunakan reference dan objek VertexArray.
Bab 4, Pointer, Standard
Template Library, dan Manajemen Tekstur. Di bab ini,
kita akan mempelajari banyak hal baru sekaligus menyelesaikan sebagian besar
elemen dalam game. Pertama, kita akan mengenal konsep dasar pointer dalam C++.
Pointer adalah variabel yang menyimpan alamat memori, biasanya alamat dari
variabel lain. Sekilas konsep ini mirip dengan reference, tetapi kita akan
melihat bahwa pointer jauh lebih fleksibel dan kuat. Kita akan menggunakan
pointer untuk menangani gerombolan zombie yang terus bertambah.
Selain itu, kita juga akan belajar tentang Standard Template Library (STL),
yaitu kumpulan kelas yang memungkinkan kita menerapkan berbagai teknik
manajemen data dengan cepat dan mudah.
Bab 5, Membuat Kelas
TextureHolder dan Membangun Gerombolan Zombie. Setelah
memahami dasar STL, kita akan menggunakan pengetahuan tersebut untuk mengelola
seluruh tekstur dalam game. Jika terdapat seribu zombie, tentu kita tidak ingin
memuat ulang grafik zombie ke GPU untuk masing-masing objek.
Kita juga akan memperdalam konsep OOP dan mempelajari static function, yaitu fungsi dalam kelas yang dapat dipanggil tanpa membuat
instansinya terlebih dahulu. Selain itu, kita akan mendesain kelas agar hanya
bisa memiliki satu instans yang aktif. Pendekatan ini berguna ketika berbagai
bagian kode perlu menggunakan data yang sama.
Bab 6, Deteksi Tumbukan,
Pickups, dan Peluru. Hingga saat ini, kita telah
menerapkan berbagai elemen visual utama dalam game: karakter dapat dikendalikan
dan bergerak di arena yang dipenuhi zombie. Namun, mereka belum saling
berinteraksi; zombie bisa menembus pemain tanpa efek apa pun. Oleh karena itu,
kita perlu menambahkan deteksi tumbukan antara zombie dan pemain.
Jika zombie bisa melukai dan membunuh pemain, maka pemain juga harus bisa
menembak mereka. Kita akan memastikan peluru dapat mengenai dan mengalahkan
zombie. Sekaligus, kita akan menambahkan class baru untuk health dan ammo
pickups.
Urutan pembahasan dalam bab ini meliputi: menembak peluru, menambahkan
crosshair dan menyembunyikan kursor, menampilkan pickups, serta mendeteksi
tumbukan antar objek.
Bab 7, Menyusun Tampilan dan
Menerapkan HUD. Dalam bab ini, kita akan melihat
nilai sebenarnya dari SFML Views. Kita akan menambahkan beberapa objek teks
menggunakan SFML Text dan memanipulasinya seperti yang telah kita lakukan pada
proyek Timber!!!
dan Pong. Hal baru di sini adalah kita akan menggambar HUD menggunakan View
kedua. Dengan begitu, HUD akan tetap berada di posisi yang tepat di atas aksi
utama permainan, terlepas dari apa pun yang terjadi pada latar belakang,
pemain, atau objek lainnya.
Bab 8, Efek Suara, File I/O,
dan Penyelesaian Game, Kita hampir menyelesaikan
proyek ini. Bab yang singkat ini akan menunjukkan cara memanipulasi berkas di
penyimpanan menggunakan C++ Standard Library, sekaligus menambahkan efek
suara. Meskipun kita sudah pernah menambahkan suara, di sini akan dijelaskan
penempatan yang tepat untuk memanggil fungsi play. Kita juga akan menutup
beberapa bagian yang belum sempurna agar game terasa lengkap. Topik yang
dibahas meliputi: menyimpan dan memuat skor tertinggi menggunakan file
input/output, menambahkan efek suara, menaikkan level pemain, serta menampilkan
gelombang zombie baru.
Bab 9, Run!. Selamat datang di proyek terakhir.
Run! adalah endless runner di mana tujuan pemain adalah
bertahan di depan platform yang menghilang dari belakang. Dalam proyek ini,
kita akan mempelajari berbagai teknik baru dalam pemrograman game serta lebih
banyak topik C++. Salah
satu peningkatan utama dari game ini dibanding proyek sebelumnya adalah
pendekatannya yang jauh lebih berorientasi objek. Akan ada banyak kelas
tambahan, tetapi masing-masing berkas kode tetap singkat dan mudah dipahami.
Kita akan membuat game di mana fungsi dan tampilan semua objek didelegasikan ke
kelas-kelas khusus, sehingga game loop utama tidak perlu diubah, apa pun
perilaku objek di dalam game. Pendekatan ini sangat kuat karena memungkinkan
anda membuat game baru hanya dengan menulis komponen tambahan (kelas) yang
menggambarkan perilaku dan tampilan entitas yang diinginkan. Dengan kata lain,
struktur kode yang sama dapat digunakan untuk game yang sama sekali berbeda.
Bab 10, Suara, Logika Game,
Komunikasi Antar Objek, dan Pemain. Dalam bab ini,
kita akan menambahkan suara ke dalam game. Karena kita sudah pernah
melakukannya, proses ini akan cepat. Hanya dengan beberapa baris kode, kita
juga akan menambahkan musik latar. Nantinya, meskipun bukan di bab ini, kita
akan menambahkan directional (spatialized) sound. Semua kode terkait suara akan
dikemas dalam satu kelas bernama SoundEngine. Setelah itu, kita akan mulai
membangun karakter pemain dengan membuat dua kelas: satu yang menurunkan Update
dan satu yang menurunkan Graphics. Pendekatan ini juga akan digunakan untuk
membuat berbagai objek lain di sepanjang game. Kita juga akan melihat bagaimana
objek dapat saling berkomunikasi dengan mudah menggunakan pointer.
Dr. Phil. Dony Novaliendry, S.Kom., M.Kom
