Finite State Machine atau FSM adalah sebuah model komputasi yang dapat digunakan untuk mensimulasikan urutan logika atau representasi dari urutan eksekusi dan kondisi. Perhatikan diagram FSM sederhana berikut ini:
Terdapat 4 kondisi utama yaitu:
- DUCKING
- STANDING
- JUMPING
- DIVING
Dalam kondisi DUCKING
, jika ditekan tombol ARROW-DOWN
maka kondisi akan berubah menjadi STANDING
. Apabila dalam kondisi STANDING
ditekan ARROW-DOWN
, kondisi akan berubah menjadi DUCKING
. Apabila dalam kondisi STANDING
ditekan BUTTON-B
, maka kondisi akan berubah menjadi JUMPING
. Apabila dalam kondisi JUMPING
ditekan tombol ARROW-DOWN
maka kondisi akan berubah menjadi DIVING
.
Penerapan Finite-State Machine
FSM juga dapat membantu kita di dalam merancang core loop mechanic game. Baik itu game digital maupun board game dapat memanfaatkan FSM ini. FSM juga dapat kita gunakan untuk menyederhanakan kode program AI kita, terutama untuk karakter-karakter pendukung yang bergerak secara konstan pada kondisi tertentu.
Kamu bisa mencari lebih lanjut tentang NPC
(Non-playable Characters) pada artikel saya berikutnya.
Gambar di atas, memperlihatkan FSM dapat dipakai untuk mengatur kondisi Mario. MARIO NORMAL
apabila mendapatkan JAMUR
akan berubah menjadi MARIO RAKSASA
. MARIO NORMAL
apabila mendapatkan BULU
akan berubah menjadi MARIO TERBANG
. MARIO NORMAL
apabila mendapatkan BUNGA
akan menjadi MARIO PENEMBAK API
.
Contoh Kode Program
Sebagai contoh implementasi, kita bisa menggunakan perintah switch
di dalam kode program. Perhatikan contoh kode program berikut ini:
switch (currentState) {
case ST_IDLE:
// do something in the idle state
break;
case ST_STOP:
// do something in the stop state
break;
// etc...
}
FSM memang pada dasarnya akan sering diterapkan menggunakan perintah switch.
Baca Juga : Apa itu Algoritma dalam Pemrograman? Simak Struktur dan Contohnya di Sini!
Kelemahan Finite-State Machine
Selain kelebihan, FSM juga memiliki kelemahan. Salah satunya adalah karakter yang dibentuk menggunakan FSM akan menjadi boring (membosankan) dan dapat ditebak oleh pemain. Apa solusinya? Gunakan AI (Artificial Intelligence) yang lebih kompeks sehingga terdapat banyak variable yang memungkinkan karakter di dalam game kita bergerak secara lebih dinamis dan fleksibel.
Beberapa AI yang dapat dipakai di dalam pengembangan game digital:
- Pathfinding
- Fuzzy Logic
- A*
- Dan lain-lain