Saya akan mencoba menjawab ini sebaik mungkin, tetapi ada beberapa "praktik terbaik" yang saya tidak yakin, tetapi saya akan mencoba menjabarkannya sebersih mungkin.
FSM
Pertama, tutorial Miner adalah dari Programming Game AI dengan Contoh oleh Mat Buckland (yang saya sarankan Anda dapatkan sebagai pengantar AI). Dia menggunakan enum untuk setiap negara, BUKAN struct. Dengan struct dalam contoh Anda, Anda memiliki boolean sebagai negara bagian, sehingga Anda dapat memiliki sejumlah ini pada saat yang sama. Ini mungkin mengarah pada perilaku yang Anda inginkan, tetapi lebih sering daripada tidak dengan FSM (Mesin Negara Hingga) itu mengarah pada perilaku yang tidak diinginkan.
Sebagai contoh:
enum
{
WANDER_AROUND,
ATTACK,
RUN_AWAY,
};
Kedua, itu bukan satu-satunya cara dia menggambarkan keadaan. Cara saya pribadi lebih suka (tergantung pada situasinya) adalah dengan membuat kelas abstrak yang disebut State yang memiliki fungsi Enter (), Exit () dan Update (). Kemudian buat status saya sebagai subclass dari kelas State.
Seperti gambar ini (sebenarnya ada pada halaman 2 tautan itu):
Pola Negara
Menurut pendapat pribadi saya, pola keadaan hanyalah bagian dari desain perangkat lunak di mana perangkat lunak memiliki sejumlah negara. The implementasi adalah ke pengembang. Saya tidak merasa ada perbedaan yang tepat antara menggunakan pernyataan saklar besar atau membuat mesin status lengkap untuk menjalankan semua status Anda seperti yang saya uraikan di atas. Mereka pada dasarnya melakukan hal yang sama. Jadi dalam hal itu, jawaban untuk salah satu pertanyaan Anda adalah ya, saya yakin halaman itu menggambarkan pola keadaan.
Pro kontra
Ada pro dan kontra untuk setiap metode yang Anda gunakan untuk menerapkan desain yang digerakkan oleh negara.
Menggunakan Pernyataan If / Else atau Switch
Pro:
- Sangat mudah untuk menambah dan memeriksa kondisi negara
- Dapat dibuat prototipe dengan sangat cepat
Cons:
- Ketika Anda punya banyak status, itu bisa berubah sangat jelek, sangat cepat.
- Melacak transisi, efek ketika negara dimasukkan / keluar atau sesuatu yang khusus untuk negara sulit
Menggunakan mesin keadaan berorientasi objek
Pro:
- Sangat extensible - satu-satunya hal yang perlu Anda lakukan adalah membuat negara baru yang mewarisi kelas Negara abstrak
- Mudah dirawat - Anda tidak perlu khawatir tentang kode yang tampak seperti spaghetti karena setiap negara bagian berada di kelasnya masing-masing. Anda dapat dengan mudah melihat kondisi yang terkait dengan keadaan itu tanpa mengkhawatirkan status lainnya.
- Intuitif - Jika Anda mengerjakan proyek tim dengan mesin status semacam ini, akan jauh lebih mudah bagi orang yang membaca kode Anda. Mereka tidak perlu membaca baris demi baris kode hanya untuk sampai ke keadaan tertentu ("Selalu memprogram seolah-olah programmer mempertahankan kode Anda adalah psikopat yang tahu di mana Anda tinggal!" :))
Cons:
- Slight learning curve - Desain ini mungkin membutuhkan waktu cukup lama untuk membuat kepala Anda benar-benar bulat ketika mengimplementasikannya
- Jujur saya tidak bisa memikirkan lagi, karena saya lebih suka cara ini, tetapi jika ada yang ingin menambahkannya, cukup komentar dan saya akan menambahkannya.
Saya harap itu menjawab semua pertanyaan Anda. Bahkan, saya baru saja membuka salinan AI Pemrograman Game saya dengan Contoh dan Mat tidak menyebutkan bahwa mesin negara dikenal sebagai "pola desain keadaan". Secara pribadi, saya tidak setuju, tetapi masing-masing miliknya sendiri.
Semoga bermanfaat :)