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

Buat Permainan Hoki AI Menggunakan Kelakuan Berkendara: Mekanik Permainan

by
Difficulty:IntermediateLength:LongLanguages:
This post is part of a series called Create AI for a Hockey Game Using Steering Behaviors.
Create a Hockey Game AI Using Steering Behaviors: Defense

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

Dalam catatan masa lalu dalam siri ini, kami telah memberi tumpuan kepada konsep-konsep di belakang kecerdasan buatan yang telah kami pelajari. Di bahagian ini, kami akan membungkus semua pelaksanaan ke dalam permainan hoki yang boleh dimainkan sepenuhnya. Anda akan belajar cara menambah potongan yang hilang untuk mengubahnya menjadi permainan, seperti skor, kuasa, dan sedikit reka bentuk permainan.

Keputusan Akhir

Berikut adalah permainan yang akan dilaksanakan menggunakan semua elemen yang dijelaskan dalam tutorial ini.

Reka Bentuk Permainan Pemikiran

Bahagian sebelumnya dalam siri ini memberi tumpuan kepada menjelaskan bagaimana permainan AI berfungsi. Setiap bahagian terperinci aspek tertentu permainan, seperti bagaimana atlet bergerak dan bagaimana serangan dan pertahanan dilaksanakan. Mereka didasarkan pada konsep seperti tingkah laku stereng dan mesin keadaan terhingga berasaskan-tack.

Namun, untuk membuat permainan yang dapat dimainkan sepenuhnya, semua aspek tersebut mesti dibungkus menjadi mekanik permainan teras. Pilihan yang paling jelas adalah untuk melaksanakan semua peraturan rasmi perlawanan hoki rasmi, tetapi itu memerlukan banyak kerja dan masa. Mari kita ambil pendekatan fantasi yang lebih mudah.

Semua peraturan hoki akan digantikan dengan satu: jika anda membawa puck dan disentuh oleh lawan, anda membeku dan menghancurkan satu juta keping! Ia akan membuat permainan lebih mudah untuk bermain dan bersenang-senang untuk kedua-dua pemain: yang membawa kucing dan yang cuba memulihkannya.

Untuk meningkatkan mekanik ini, kami akan menambah beberapa-kuasa. Mereka akan membantu pemain menjaringkan gol dan menjadikan permainan ini lebih dinamik.

Menambah Keupayaan untuk Markah

Mari kita mulakan dengan sistem pemarkahan, yang bertanggungjawab untuk menentukan siapa yang menang atau kalah. Skor pasukan setiap kali puck memasuki matlamat lawan.

Cara termudah untuk melaksanakan ini adalah dengan menggunakan dua segi empat tepat bertindih:

Overlapped rectangles describing the goal area If the puck collides with the red rectangle the team scores
Rectangl overlapping yang menerangkan kawasan matlamat. Sekiranya puck berlanggar dengan segi empat merah, skor pasukan.

Segitiga hijau mewakili kawasan yang diduduki oleh struktur matlamat (bingkai dan bersih). Ia berfungsi seperti blok pepejal, jadi jururawat dan atlet tidak dapat bergerak melaluinya; mereka akan bangkit semula.

Segitiga merah mewakili "kawasan skor". Sekiranya puck itu bertindih dengan segi empat tepat ini, bermakna satu pasukan hanya menjaringkan gol.

Gelombang merah kecil lebih kecil daripada yang hijau, dan diletakkan di depannya, jadi jika puck menyentuh gol di mana-mana pihak tetapi di depan, ia akan bangkit kembali dan tidak ada skor yang akan ditambahkan:

A few examples of how the puck would behave if it touched the rectangles while moving
Beberapa contoh bagaimana pak akan berperilaku jika ia menyentuh segi empat tepat semasa bergerak.

Menguruskan Semua Selepas Seseorang

Selepas satu markah pasukan, semua atlet mesti kembali ke kedudukan awal mereka dan puck harus diletakkan di pusat rink lagi. Selepas proses ini, perlawanan itu dapat diteruskan.

Menggerakkan Atlet Untuk Kedudukan Awal Mereka

Seperti yang dijelaskan di bahagian pertama siri ini, semua atlet mempunyai keadaan AI dipanggil prepareForMatch yang akan memindahkan mereka ke arah kedudukan awal, dan menyebabkan mereka berjalan lancar di sana.

Apabila puck bertindih salah satu "kawasan skor", mana-mana keadaan AI yang sedang aktif semua atlet dikeluarkan dan menyediakanForMatch ditolak ke otak. Di mana pun atlet, mereka akan kembali ke kedudukan awal mereka selepas beberapa saat:

Memindahkan Kamera ke Pusat Rink

Oleh kerana kamera sentiasa mengikuti puck, jika ia secara langsung ditelefon ke pusat gelanggang selepas skor seseorang, pandangan semasa akan tiba-tiba berubah, yang akan menjadi hodoh dan mengelirukan.

Cara yang lebih baik untuk melakukan ini adalah untuk menggerakkan puck dengan lancar ke arah pusat jalan; kerana kamera mengikuti keping, ini akan menarik pandangan dari matlamat ke pusat jalan.

Ini boleh dicapai dengan menukar vektor halaju puck selepas ia mencapai kawasan matlamat. Vektor halaju baru mesti "tolak" pak ke arah pusat jalan, supaya dapat dikira sebagai:

Dengan menolak posisi tengah pusat dari kedudukan semasa puck, ada kemungkinan untuk mengira vektor yang menunjukkan terus ke arah pusat jalan.

Selepas menormalkan vektor ini, ia boleh dikecilkan dengan apa-apa nilai, seperti 100, yang menguasai seberapa pantas puck bergerak ke arah pusat jalan.

Di bawah adalah imej dengan perwakilan vektor halaju baru:

Calculation of a new velocity vector that will move the puck towards the rink center
Pengiraan vektor halaju baru yang akan bergerak ke arah pusat jalan.

Vektor ini digunakan sebagai vektor V halaju puck, jadi puck akan bergerak ke arah pusat jalan seperti yang dimaksudkan.

Untuk mengelakkan sebarang tingkah laku yang pelik ketika puck sedang bergerak ke arah pusat jalan, seperti interaksi dengan seorang atlet, puck itu dinyahaktifkan semasa proses tersebut. Akibatnya, ia berhenti berinteraksi dengan atlet dan ditandakan sebagai tidak kelihatan. Pemain tidak akan melihat keping bergerak, tetapi kamera masih akan mengikutnya.

Untuk menentukan sama ada keping sudah berada dalam kedudukan, jarak di antaranya dan pusat gelanggang dikira semasa pergerakan. Sekiranya kurang dari 10, contohnya, keping cukup dekat untuk diletakkan terus di pusat rink dan diaktifkan kembali supaya perlawanan dapat diteruskan.

Menambah Power-Ups

Idea di sebalik kuasa adalah untuk membantu pemain mencapai matlamat utama permainan, iaitu untuk menjaringkan gol dengan membawa gol ke gawang lawan.

Demi skop, permainan kami akan mempunyai hanya dua kuasa: Bantuan Hantu dan Takut Puck. Bekas menambah tiga atlet tambahan kepada pasukan pemain untuk beberapa waktu, sementara yang kedua membuat lawan melarikan diri keping selama beberapa saat.

Kuasa ditambah kepada kedua-dua pasukan apabila sesi skor.

Melaksanakan "Bantuan Hantu" Kuasa

Oleh kerana semua atlet yang ditambah oleh Ghost Help power-up adalah sementara, kelas Atlet mesti diubahsuai untuk membolehkan seorang atlet untuk ditandai sebagai "hantu". Jika seorang atlet adalah hantu, ia akan mengeluarkan dirinya dari permainan selepas beberapa saat.

Di bawah adalah kelas Atlet, hanya menonjolkan penambahan yang dibuat untuk menampung fungsi hantu:

Properti mGhost adalah boolean yang memberitahu jika atlet adalah hantu atau tidak, manakala mGhostCounter mengandungi jumlah detik yang atlet harus menunggu sebelum mengeluarkan dirinya dari permainan.

Kedua-dua sifat tersebut digunakan oleh kaedah updatePowerups ():

Kaedah updatePowerups(), dipanggil dalam kemas kini() atlet rutin, akan mengendalikan semua pemprosesan kuasa di atlet. Sekarang semua yang dilakukan adalah memeriksa sama ada atlet semasa adalah hantu atau tidak. Sekiranya ia, maka mGhostCounter harta akan diturunkan oleh jumlah masa yang berlalu sejak kemas kini terakhir.

Apabila nilai mGhostCounter mencapai sifar, ia bermakna bahawa atlet sementara telah aktif cukup lama, jadi ia mesti mengeluarkan dirinya dari permainan. Untuk membuat pemain sedar itu, atlet akan mula berkedip dua saat terakhir sebelum hilang.

Akhirnya, sudah tiba masanya untuk melaksanakan proses menambah atlet sementara apabila kuasa diaktifkan. Itu dilakukan dalam kaedah powerupGhostHelp(), yang terdapat dalam logika permainan utama:

Kaedah ini melaraskan satu gelung yang sepadan dengan jumlah atlet sementara yang ditambah. Setiap atlet baru ditambah ke bahagian bawah gelanggang dan ditandakan sebagai hantu.

Seperti yang dinyatakan sebelum ini, atlet hantu akan mengeluarkan diri mereka dari permainan.

Melaksanakan "Takut The Puck" Power-Up

The Fear The Puck Power-up membuat semua lawan melarikan diri keping selama beberapa saat.

Sama seperti kuasa Bantuan Hantu, kelas Atlet mesti diubah suai untuk menampung fungsi tersebut:

Mula-mula kaedah updatePowerups() diubah untuk mengurangkan sifat mFearCounter, yang mengandungi jumlah masa yang harus dielakkan oleh atlet. Hartanah mFearCounter ditukar setiap kali kaedah fearPuck() dipanggil.

Dalam kaedah kemas kini() Atlet, satu ujian ditambah untuk memeriksa sama ada kuasa perlu dilakukan. Jika atlet adalah lawan yang dikawal oleh AI (amIAnAiControlledOpponent() kembali benar) dan atlet harus menghindari keping (shouldIEvadeFromPuck() kembali benar juga), kaedah evadeFromPuck() digunakan.

Kaedah evadeFromPuck() menggunakan kelakuan mengelak, yang membuat entiti mengelakkan sebarang objek dan lintasannya sama sekali:

Semua kaedah evadeFromPuck() adalah untuk menambah daya mengelakkan kepada daya pemandu atlit semasa. Ia menjadikan dia mengelak kepak tanpa mengabaikan kuasa stereng yang telah ditambah, seperti yang dicipta oleh keadaan AI yang sedang aktif.

Untuk dapat bertahan, puck mesti berkelakuan seperti lantunan, kerana semua atlet lakukan (lebih banyak maklumat tentang itu di bahagian pertama siri). Akibatnya, harta lasak, yang mengandungi kedudukan dan halaju semasa puck, mesti ditambah ke kelas Puck:

Akhirnya, kami mengemas kini logik permainan utama untuk membuat lawan takut pada kepak apabila kuasa diaktifkan:

Kaedah melaraskan semua atlet lawan (pasukan yang tepat, dalam kes ini), memanggil kaedah fearkPuck() masing-masing. Ini akan mencetuskan logik yang menjadikan para atlet takut pada keping selama beberapa saat, seperti yang dijelaskan sebelumnya.

Pembekuan dan Kerosakan

Penambahan terakhir kepada permainan adalah bahagian beku dan menghancurkan. Ia dilakukan dalam logik permainan utama, di mana rutin memeriksa sama ada atlet pasukan kiri bertindih dengan atlet pasukan yang tepat.

Cek yang bertindih secara automatik dilakukan oleh mesin permainan Flixel, yang memanggil panggilan balik setiap kali pertindihan ditemui:

Panggilan balik ini diterima sebagai parameter atlet bagi setiap pasukan yang bertindih. Pemeriksaan ujian jika pemilik puck tidak batal, yang bermaksud ia sedang dibawa oleh seseorang.

Dalam kes itu, pemilik puck dibandingkan dengan atlet yang hanya bertindih. Jika salah seorang daripada mereka membawa puck (jadi dia adalah pemilik puck itu), dia hancur dan pemilikan puck itu melaluinya kepada atlet yang lain.

Kaedah menghancurkan() dalam kelas Atlet akan menandakan atlet sebagai tidak aktif dan meletakkannya di bahagian bawah gelanggang selepas beberapa saat. Ia juga akan memancarkan beberapa zarah yang mewakili kepingan ais, tetapi topik ini akan diliputi dalam jawatan lain.

Kesimpulan

Dalam tutorial ini, kami melaksanakan beberapa elemen yang diperlukan untuk menjadikan prototaip hoki kami menjadi permainan yang boleh dimainkan sepenuhnya. Saya dengan sengaja meletakkan tumpuan pada konsep-konsep di sebalik setiap elemen tersebut, bukannya bagaimana untuk melaksanakannya dalam enjin permainan X atau Y.

Pendekatan membekukan dan menghancurkan yang digunakan untuk permainan mungkin berbunyi terlalu fantastik, tetapi ia membantu mengekalkan projek yang boleh diurus. Peraturan sukan sangat spesifik, dan pelaksanaannya boleh menjadi rumit.

Dengan menambah beberapa skrin dan beberapa elemen HUD, anda boleh membuat permainan hoki penuh anda sendiri dari demo ini!

Penyokong

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.