[crossposted from stackoverflow]
Dalam permainan seperti Warcraft 3 atau Age of Empires, cara-cara yang dapat dilakukan lawan AI untuk bergerak di peta tampak hampir tanpa batas. Peta sangat besar dan posisi pemain lain terus berubah.
Bagaimana cara pencarian jalur AI dalam game seperti ini berfungsi? Metode pencarian grafik standar (seperti DFS, BFS atau A *) tampaknya tidak mungkin dilakukan dalam pengaturan seperti itu.
ai
path-finding
game-mechanics
search
selimut
sumber
sumber
Jawaban:
Dalam kebanyakan kasus, menggunakan A * di atas jala navigasi (biasanya disebut sebagai "navmesh") adalah solusi pathfinding yang digunakan RTS komersial. Ada penjelasan terperinci tentang cara kerja navmeshes, mengapa navmeshes merupakan solusi yang lebih baik daripada sistem waypoint, dan tautan ke sumber daya implementasi, di sini .
Jika Anda berencana mengembangkan mode permainan khusus (penangkapan titik / simpul) atau unit yang berpatroli, berlindung, dll., Anda mungkin ingin menerapkan lapisan titik arah di atas navmesh Anda, untuk mengontrol perilaku AI ( bukan merintis jalan ).
sumber
Check out Flowfield algoritma yang digunakan di Panglima Tertinggi 2. Ia melakukan pekerjaan yang jauh lebih baik daripada kebanyakan RTS sistem merintis jalan jangan (langsung beralih ke 0:50 untuk beberapa contoh.)
sumber
Banyak game lama menggunakan A *. Starcraft asli menggunakan A *; yang menyebabkan beberapa masalah dalam berurusan dengan tabrakan. Starcraft 2 menangani tabrakan dengan sangat baik, menggunakan perilaku swaming / berkelompok untuk mempertahankan kontrol cairan kelompok besar. Ini artikel gamedev membahas bagaimana ini mungkin menjadi dicapai.
sumber
Saya setuju dengan jawaban lain dia sudah, tetapi juga, mencoba menganggap WoW / Warcraft3 sebagai dunia 2D yang sebenarnya. Mereka berbeda dari tilebased, itu hanya ubin.
Anda juga bisa memikirkan bagaimana GPS menemukan jalur terbaik? ada banyak algortim untuk merintis jalan melalui peta yang ditautkan.
Saya pikir beberapa skrip "Gempa bot" pertama juga dapat membantu Anda, karena skrip ini dikembangkan untuk bekerja di "area yang tidak diketahui" karena kami dapat merancang level kami sendiri dari awal.
Secara keseluruhan, cara pribadi saya untuk menangani peta semacam itu, akan menganggapnya sebagai pathfinder A *. Tapi pertama-tama saya akan menghitung terlebih dahulu setiap "titik ubin" dan mengindeks semua ini dengan "tetangga terdekat" dll. Kemudian ketika sebuah objek perlu beralih dari A ke B kemudian hanya mencari di B, lihat apa yang terhubung dan terus mengulangi sampai Anda mencapai tujuan.
Bergantung pada jenis permainan dan lanskap / skenario, berbagai taktik pra-pemindaian mungkin berguna juga. Beberapa permainan memiliki sedikit hambatan dan ini bisa menjadi gerakan "garis lurus" + beberapa "bagaimana saya bisa berkeliling" untuk objek.
Semoga ini masuk akal dan mungkin memberi Anda beberapa pemikiran untuk dikerjakan.
sumber
Sebagian besar game menggunakan semacam Algoritma Pencarian atau A * untuk menemukan jalur di peta. AI disesuaikan dalam beberapa aspek jelas karena alasan kinerja.
Anda akan melihat ini di Starcraft 2 di mana Zerglings jelas tidak jalan sama sekali, itu akan menjadi mimpi buruk CPU untuk melakukan itu untuk Zerglings. Mereka hanya melakukan yang terbaik untuk mendapatkan dari A ke B dan bahkan tidak berusaha untuk menemukan jalan terbaik. Mereka akan mendapatkan sedekat mungkin kemudian leher botol di choke atau landai.
sumber
Peta adalah kisi. Kisi adalah grafik. A * berfungsi pada grafik, ini adalah algoritma pencarian grafik. A * harus mencari beberapa node grafik.
Seperti yang telah disebutkan mereka dapat menggunakan navigasi mesh. Tetapi A * (atau sesuatu yang serupa) akan berada di atas jala itu, karena poligon dari jala ini hanyalah simpul dari grafik; A * kemudian akan mencari jalur dari satu poligon ke poligon lain.
Tidak yakin tentang Warcraft atau game komersial, tetapi ada juga teknik yang disebut Difusi Kolaboratif dan sangat sederhana; biasanya dilakukan di grid. Ada juga teknik yang disebut Bidang Potensial , yang sangat mirip dengan yang sebelumnya jika tidak sama.
Anda mungkin juga mencoba:
sumber
Saya sama sekali tidak berpengalaman, tapi saya pikir solusi yang baik didasarkan pada heuristik, bukan pada pemeriksaan lengkap dari peta yang diketahui. Heuristik yang bisa saya pikirkan berbasis lokal dan berdasarkan pengalaman. Kontrol lokal dapat didasarkan pada cek medan dan rintangan lokal, terus bergerak ke arah yang diperlukan. Saya pikir sebagian besar peta tidak memerlukan gerakan rumit seperti labirin, tetapi cukup terhubung. Heuristik lain adalah menggunakan jalur yang diketahui sebelumnya (dieksplorasi oleh unit lain atau secara eksplisit oleh pengguna) untuk memindahkan unit ke posisi yang diketahui atau hampir diketahui. Tapi saya berbicara tentang pindah di peta besar, tidak benar-benar di ruang tertutup seperti kata ZorbaTHut. Dalam kasus yang ramai algoritma mungkin lebih kompleks, membutuhkan semacam "prediksi", koordinasi antara unit tim yang sama atau hanya strategi menunggu semafor. Juga,
Saya pikir algoritma heuristik baik karena mereka biasanya memberikan solusi yang baik pada ruang besar dengan waktu perhitungan yang masuk akal (yang penting, ketika Anda memindahkan banyak unit).
Maaf jika ini adalah jawaban umum: Saya bekerja dengan orang banyak, tetapi ruangnya cukup aneh dan saya tidak bisa menjelaskan dengan tepat bagaimana algoritme bekerja (berdasarkan agen, toh, tidak didefinisikan secara global). Saya harap Anda bisa mendapatkan beberapa ide yang bermanfaat dari jawaban saya.
sumber