Unlimited WordPress themes, graphics, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Game Development
  2. Artificial Intelligence
Gamedevelopment

Mesin Finite-State: Teori dan Pelaksanaan

by
Difficulty:IntermediateLength:LongLanguages:

Malay (Melayu) translation by Aisyah Arrafah (you can also view the original English article)

Mesin terhingga  adalah model yang digunakan untuk mewakili dan mengawal aliran pelaksanaan. Ia sesuai untuk melaksanakan AI dalam permainan, menghasilkan hasil yang hebat tanpa kod kompleks. Tutorial ini menerangkan teori, pelaksanaan dan penggunaan mesin terma yang berasaskan sederhana dan tumpukan.

Semua ikon yang dibuat oleh Lorc, dan boleh didapati di http://game-icons.net.

Nota: Walaupun tutorial ini ditulis menggunakan AS3 dan Flash, anda harus menggunakan teknik dan konsep yang sama dalam hampir semua persekitaran pembangunan permainan.


Apakah Mesin Negeri yang Sempurna?

Mesin negara terbatas, atau FSM untuk jangka pendek, merupakan model perhitungan berdasarkan mesin hipotetikal yang dibuat dari satu atau lebih negara. Hanya keadaan tunggal yang boleh aktif pada masa yang sama, jadi mesin mesti beralih dari satu negeri ke negara yang lain untuk melakukan tindakan yang berbeza.

FSM biasanya digunakan untuk mengatur dan mewakili aliran pelaksanaan, yang berguna untuk melaksanakan AI dalam permainan. Misalnya, "otak" musuh, dapat dilaksanakan dengan menggunakan FSM: setiap negara mewakili tindakan, seperti menyerang atau mengelakkan:

FSM mewakili otak musuh.

FSM boleh diwakili oleh graf, di mana nod adalah negeri dan tepi adalah peralihan. Setiap tepi mempunyai label memaklumkan apabila peralihan itu sepatutnya berlaku, seperti pemain dekat label dalam angka di atas, yang menunjukkan bahawa mesin akan beralih dari bersiar-siar untuk menyerang jika pemain sudah dekat.


Negara Perancangan dan Peralihan Mereka

Pelaksanaan FSM bermula dengan negeri-negeri dan peralihan yang akan dimiliki. Bayangkan FSM yang berikut, yang mewakili otak sarang membawa pulang daun:

FSM mewakili otak semut.

Titik permulaan adalah keadaan mencari daun , yang akan terus aktif sehingga semut menemui daun. Apabila itu berlaku, keadaan semasa dialihkan ke rumah, yang tetap aktif sehingga semut pulang ke rumah. Apabila semut akhirnya tiba di rumah, keadaan aktif menjadi mencari daun lagi, jadi semut mengulangi perjalanannya.

Jika keadaan aktif mencari daun dan kursor tetikus menghampiri semut, terdapat peralihan kepada keadaan larian. Walaupun keadaan itu aktif, semut akan lari dari kursor tetikus. Apabila kursor tidak lagi menjadi ancaman, terdapat peralihan kembali ke keadaan mencari daun.

Oleh kerana terdapat peralihan menghubungkan mencari daun dan melarikan diri, semut akan selalu lari dari kursor tetikus apabila ia mendekati selagi semut mencari daun. Itu tidak akan berlaku jika keadaan aktif pulang (lihat gambar di bawah). Dalam hal ini semut akan berjalan pulang tanpa takut, hanya beralih ke keadaan mencari daun ketika tiba di rumah.

FSM mewakili otak semut. Perhatikan kekurangan peralihan antara lari dan pulang ke rumah.

Melaksanakan FSM

FSM boleh dilaksanakan dan dikemas dalam kelas tunggal, dinamakan FSM. Idea ini adalah untuk melaksanakan setiap negeri sebagai fungsi atau kaedah, menggunakan harta yang dipanggil aktifState di dalam kelas untuk menentukan keadaan mana yang aktif:

Memandangkan setiap keadaan berfungsi, sementara keadaan tertentu aktif, fungsi yang mewakili keadaan itu akan dipanggil setiap kemas kinian permainan. Hartanah aktifState adalah penunjuk kepada fungsi, jadi ia akan menunjuk kepada fungsi keadaan aktif.

Kaedah kemas kini() kelas FSM mesti dipanggil setiap bingkai permainan, supaya dapat memanggil fungsi yang ditunjukkan oleh sifat aktifState. Panggilan itu akan mengemas kini tindakan keadaan yang sedang aktif.

Kaedah setState() akan memindahkan FSM ke negeri yang baru dengan menunjuk harta aktifState ke fungsi negara yang baru. Fungsi negara tidak perlu menjadi anggota FSM; ia boleh tergolong dalam kelas lain, yang menjadikan kelas FSM lebih generik dan boleh diguna semula.


Menggunakan FSM

Menggunakan kelas FSM yang telah diterangkan, sudah tiba masanya untuk melaksanakan "otak" watak. Ant yang dijelaskan sebelum ini akan digunakan dan dikawal oleh FSM. Berikut adalah perwakilan negara dan peralihan, dengan fokus pada kod:

FSM otak semut dengan fokus pada kod.

Semut ini diwakili oleh kelas semut, yang mempunyai sifat bernama otak dan kaedah untuk setiap negeri. Harta otak adalah contoh kelas FSM:

Kelas Ant juga mempunyai halaju dan kedudukan kedudukan, kedua-duanya digunakan untuk mengira pergerakan menggunakan integrasi Euler. Kaedah kemas kini() dipanggil setiap bingkai permainan, jadi ia akan mengemas kini FSM.

Untuk menjaga perkara yang mudah, kod yang digunakan untuk memindahkan semut, seperti moveBasedOnVelocity(), akan ditinggalkan. Lebih banyak maklumat yang boleh didapati dalam siri Persefahaman Pengendalian Persefahaman.

Di bawah ini adalah pelaksanaan setiap negeri, bermula dengan findLeaf(), negeri yang bertanggungjawab membimbing semut ke kedudukan daun:

Keadaan goHome(), digunakan untuk membimbing rumah semut:

Akhirnya, runAway() menyatakan, digunakan untuk membuat semut melarikan diri kursor tetikus:

Hasilnya adalah semut yang dikawal oleh FSM "otak":

Ant dikawal oleh FSM. Gerakkan kursor tetikus untuk mengancam semut.

Meningkatkan Aliran: FSM Berasaskan Stack

Bayangkan semut juga perlu lari dari kursor tetikus apabila ia pulang ke rumah. FSM boleh dikemas kini dengan yang berikut:

Ant FSM dikemaskini dengan peralihan baru.

Ia seolah-olah satu pengubahsuaian remeh, penambahan peralihan baru, tetapi ia menimbulkan masalah: jika keadaan melarikan diri dan kursor tetikus tidak lagi dekat, keadaan apa yang harus dilakukan peralihan semut ke: pulang atau mencari daun?

Penyelesaian masalah itu ialah FSM berasaskan-timbunan. Tidak seperti FSM yang sedia ada, FSM berasaskan stack menggunakan timbunan untuk mengawal keadaan. Bahagian atas tumpukan mengandungi keadaan aktif; peralihan ditangani dengan menolak atau muncul negeri dari timbunan:

FSM berasaskan tumpukan

Status yang sedang aktif boleh memutuskan apa yang perlu dilakukan semasa peralihan:

Peralihan dalam FSM berasaskan timbunan: pop sendiri + tolak baru; pop sendiri; tolak baru.

Ia boleh muncul dari timbunan dan menolak negeri lain, yang bermaksud peralihan penuh (sama seperti yang dilakukan oleh FSM yang sederhana). Ia boleh muncul dari timbunan dan menolak negeri lain, yang bermaksud peralihan penuh (sama seperti yang dilakukan oleh FSM yang sederhana). Akhirnya, ia hanya boleh menolak keadaan baru, yang bermaksud keadaan sedang aktif akan berubah untuk sementara waktu, tetapi apabila ia muncul dari timbunan, keadaan yang aktif sebelum ini akan mengambil alih lagi.


Melaksanakan FSM Berasaskan Stack

FSM berasaskan tumpukan boleh dilaksanakan menggunakan pendekatan yang sama seperti sebelumnya, tetapi kali ini menggunakan pelbagai petunjuk fungsi untuk mengawal timbunan. Hartanah aktifState tidak lagi diperlukan, kerana bahagian atas timbunan sudah menunjuk ke keadaan yang sedang aktif:

Kaedah setState() telah digantikan dengan dua kaedah baru: pushState() dan popState(); pushState() menambah keadaan baru ke bahagian atas timbunan, sementara popState() membuang negeri di bahagian atas timbunan. Kedua-dua kaedah ini secara automatik memindahkan mesin ke keadaan yang baru, kerana ia mengubah bahagian atas timbunan.


Menggunakan FSM Berasaskan Stack

Apabila menggunakan FSM berasaskan timbunan, penting untuk diperhatikan bahawa setiap negeri bertanggungjawab untuk muncul dari timbunan. Biasanya keadaan membuang dirinya dari timbunan apabila tidak diperlukan lagi, seperti jika serangan() aktif tetapi sasarannya hanya mati.

Menggunakan contoh semut, hanya beberapa perubahan diperlukan untuk menyesuaikan kod tersebut untuk menggunakan FSM berasaskan timbunan. Masalah tidak mengetahui keadaan peralihan kepada kini telah diselesaikan dengan lancar terima kasih kepada sifat asas FSM:

Hasilnya adalah semut yang dapat melarikan diri dari kursor tetikus, beralih kembali ke keadaan sebelum aktif sebelum ancaman:

Ant dikawal oleh FSM berasaskan timbunan. Gerakkan kursor tetikus untuk mengancam semut.

Kesimpulan

Mesin jawatan akhir berguna untuk melaksanakan logik AI dalam permainan. Mereka boleh dengan mudah diwakili menggunakan graf, yang membolehkan pemaju melihat gambar besar, tweaker dan mengoptimumkan hasil akhir.

Pelaksanaan FSM menggunakan fungsi atau kaedah untuk mewakili negara adalah mudah, tetapi berkuasa. Keputusan yang lebih kompleks dapat dicapai dengan menggunakan FSM berasaskan tumpukan, yang memastikan aliran pelaksanaan yang terurus dan ringkas tanpa memberi kesan negatif kepada kod. Sudah tiba masanya untuk menjadikan semua musuh permainan anda lebih bijak menggunakan FSM!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.