Baru membuat AI - di mana harus mulai? [Tutup]

58

Saya baru mengenal pemrograman game dan saya mencoba membuat game ruang top-down 2d dasar dengan 2 kapal ruang yang saling bertarung. Saya melakukannya dengan baik dengan kapal ruang angkasa yang dikendalikan pengguna, tetapi tidak tahu bagaimana memulai pemrograman AI. Apakah metode / pola tertentu lebih baik untuk situasi ini? Di mana saya akan mulai?

jle
sumber
1
Inilah slide saya tentang AI dari kursus yang saya buat: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa
4
jika pernyataan. banyak dari mereka.
deceleratedcaviar

Jawaban:

27

Jika ini adalah pertama kalinya Anda mengembangkan AI, Anda tidak perlu khawatir tentang hal-hal seperti pola keadaan, matematika perilaku atau bahkan mendapatkan buku tentang subjek tersebut.

Anda benar-benar dapat pergi dengan sesuatu seperti ini:

if( targetInRange == true )  
{
    FireAtTarget();
}
else if( bulletComingTowardsMe == true )
{
    MoveAwayFromBullet();
}
else
{
    WanderAroundAimlessly();
}

Aspek utama untuk mendapatkan AI yang benar adalah dengan memikirkan perilaku apa yang Anda inginkan dari karakter tersebut dan bagaimana hal ini dapat dicapai secara realistis. Jadi untuk musuh pesawat ruang angkasa dasar, saya membayangkan tindakan yang mungkin dilakukan adalah:

  • Bergerak di sekitar
  • Api
  • Melarikan diri

Dan kapan tindakan ini bisa terjadi?

  • Bergerak - Tidak ada lagi yang bisa dilakukan
  • Api - Saat saya melihat musuh
  • Lari - Saat kesehatan saya buruk / Saat saya terbakar / dll

Setelah Anda melakukan ini karena rendahnya jumlah "status" tempat karakter Anda berada, Anda dapat menggunakan pernyataan sederhana jika seperti di atas. Saya kemudian akan merekomendasikan Anda melihat Steering Behaviors karena ini adalah perilaku yang sangat sederhana untuk diterapkan dan dapat menghasilkan gerakan yang terlihat sangat baik.

Lebih banyak dapat ditemukan di sini: http://www.red3d.com/cwr/steer/
Dan saya pasti akan merekomendasikan buku Mat Buckland, Programming Game AI By Example , terutama ketika Anda memulai.

Ketika Anda benar-benar nyaman dengan ini, saya akan menyarankan melihat Pola Negara dan Strategi.

Intinya adalah memulai dari yang kecil dan sederhana. Jangan khawatir tentang semua istilah ini yang semua orang terus bicarakan tentang FSM dan pola desain dan apa pun. Desain dan bangun pertama-tama, kemudian khawatir tentang bagaimana Anda dapat memperbaikinya dengan menggunakan metode atau standar yang ada.

Semoga itu bisa membantu!

Ray Dey
sumber
@ Fuu Cheers untuk sobat mengedit :)
Ray Dey
9

Anda mungkin ingin melihat OpenSteer , dan dokumentasi Steering Behaviors yang menyertainya. Kode sumber bukan tingkat pemula, tetapi konsep di baliknya harus memberi Anda beberapa ide bagus.

ASHelly
sumber
Apakah orang menggunakan opensteer dalam game atau lebih untuk simulasi?
jle
Saya setidaknya mencoba menggunakannya dalam game yang sedang dikembangkan. Ini bekerja dengan baik untuk saya sejauh ini. Saya percaya penulis banyak mengembangkannya saat bekerja untuk grup Playstation di Sony - Kemungkinan itu membuatnya menjadi beberapa game. MobyGames mencantumkan namanya dengan kredit JohnMadden Football dan salah satu game Leisure Suit Larry.
AShelly
FreeOrion menggunakan OpenSteer di mesin tempur taktisnya.
Mike Strobel
1
+1 Untuk menyebutkan opensteer. Jika Anda ingin melihat beberapa contoh hebat dari menggabungkan perilaku yang sangat sederhana bersama untuk membentuk sesuatu yang terlihat sangat sangat kompleks dan rumit. Periksa perilaku kemudi! Google, "Boids" dan lihat beberapa kegunaan keren. Ini tidak tenang apa yang Anda inginkan, tetapi itu akan menunjukkan kepada Anda bahwa dari kesederhanaan muncul kompleksitas
onedayitwillmake
9

Anda mungkin ingin melihat pola desain Strategi . Pada dasarnya, tuliskan strategi dasar yang sama tentang bagaimana kapal akan berperilaku:

  • Bergerak lebih dekat ke target
  • Target serangan
  • Lari dari target
  • Bergerak menuju power up
  • Gunakan power up

Kemudian Anda akan menggunakan logika (mesin negara) untuk memilih antara strategi ini. Sebagai contoh: Jika perisai kapal telah jatuh di bawah 50%, maka larilah dari target dan bergerak ke arah power up / item penyembuhan dan sebagainya.

Bryan Denny
sumber
1
jadi setiap kali melalui loop game, ia memutuskan mana dari 'strategi' yang diprioritaskan dan kemudian menjalankannya?
jle
@ Cukup banyak. Jadi masing-masing strategi Anda akan dipecah menjadi kelas mereka sendiri, menjaga kode Anda terorganisir.
Bryan Denny
7

Bolehkah saya menyarankan Anda membeli buku Artificial Intelligence for Games karya Ian Millington - sangat bagus! :) http://www.ai4g.com/

Kode sumber ada di lisensi Github - MIT.

Tentu saja, jika Anda tidak menggunakan C / C ++, maka ini mungkin kurang relevan.

Tapi benar-benar pengantar yang luar biasa untuk dunia kebodohan / kecerdasan buatan.

Hal-hal yang Anda perlukan dari itu adalah kemudi dan mesin negara. Sebagai permulaan.

Jacobs
sumber
2

Beberapa saran praktis jika Anda menggunakan mesin negara: Waspadalah dengan megastate.

Sangat menggoda untuk memiliki status "melarikan diri" yang menangani pengaturan posisi untuk melarikan diri, menetapkan kecepatan target tinggi, membersihkan semua target, dll. Jauh lebih baik daripada memiliki banyak mesin keadaan, masing-masing menangani satu atau beberapa kontrol kapal - mis. mesin negara yang menangani memilih posisi target, yang menangani senjata, dll.

Ini mungkin tampak bodoh, karena Anda harus menambahkan status pelarian ke setiap mesin individual, tetapi karena Anda dibatasi hanya satu atau dua output, status Anda berakhir sangat kecil sehingga ini seharusnya tidak menjadi masalah.

Juga, karena masing-masing kontrol sekarang di bawah kendali individu, Anda dapat akhirnya memilih posisi target yang melarikan diri sambil tetap memiliki status serangan mengendalikan senjata Anda. Anda dapat memberondong musuh saat masih menghemat tenaga mesin karena kebocoran cairan pendingin. Anda dapat menyetir untuk menghindari tabrakan saat masih melakukan penanggulangan. Semua ini tidak mungkin dengan mesin negara tunggal yang mencakup semua.

tenpn
sumber
2

Matematika Perilaku untuk Game AI

Menambahkan buku ini ke daftar titik awal untuk mempelajari pemrograman AI. Dengan fokusnya pada pengamatan dan implementasi perilaku daripada algoritma aplikasi terbatas, saya percaya itu sangat cocok untuk tugas itu.

Jay Bell
sumber
1

Cara membuat AI adalah pertanyaan yang sulit, karena terdiri dari banyak bagian:

  • Anda memilih arsitektur / paradigma umum untuk AI Anda. Apakah ini berdasarkan skrip? Apakah akan menggunakan perencanaan? Apakah ini FSM sederhana atau Anda lebih suka BT?
  • Kemudian, Anda menerapkan paradigma ini dengan implementasi / set alat tertentu.
  • Sekarang, Anda memiliki pilihan desain game, karena Anda harus memikirkan perilaku yang akan digunakan arsitektur Anda.

Poster-poster lain menyarankan buku-buku bagus dan saya suka AI4Games yang disarankan oleh jacmoe, meskipun itu cukup umum di beberapa bagian (seperti banyak buku, yang tentu saja dapat dimengerti).

Tentu saja, setiap jenis permainan memiliki kebutuhan khusus, dan permainan arcade / shooter tidak membutuhkan arsitektur yang rumit untuk mendukung gameplay yang menarik. Lib kemudi sederhana akan melakukan pekerjaan sebagai dasar dari perilaku itu, dan kemudian Anda menambahkan rincian untuk berbagai jenis musuh (beberapa, menembak secara berkala, beberapa menembak dengan memprediksi gerakan pemain, beberapa giliran untuk menghadapi musuh, yang lain mungkin mengoordinasikan serangan mereka dll).

  • Saya pikir cara terbaik untuk belajar tentang game (AI) coding terlalu baik melihat kode yang sedang berjalan. Jadi, jelajahi ohloh.net dan github dan cari proyek FOSS yang ada!
  • Tentu saja, Anda dapat memilih bagian yang sulit dan memainkan game yang sudah ada (tapi sederhana). Cobalah untuk merekayasa balik perilaku dan berpikir "Bagaimana saya mendesain ini?". Tentu saja, petunjuk selalu membantu, dan mungkin itulah sebabnya Anda bertanya di sini di gamedev.SE!
  • Sesuatu di antaranya adalah juga melihat game penembak yang ada di forum GameMaker! Anda dapat menemukan banyak skrip sederhana yang akan membantu! ;)
Astyanax
sumber
1

Pikirkan apa yang Anda lakukan saat bermain. Tanyakan pada diri Anda beberapa pertanyaan.

  • Informasi apa yang saya perlukan untuk dapat membuat keputusan?
  • Kapan saya bereaksi terhadap perubahan?
  • Apa tujuan "jangka panjang" saya dalam sesi permainan khusus ini?

Lalu, apa yang saya lakukan adalah meminta AI melihat lapangan permainan dan membuat daftar tindakan atau gerakan yang mungkin dilakukan AI berdasarkan pertanyaan-pertanyaan itu. Saya memberi peringkat dan mengurutkan gerakan ini dengan "faktor kecerdasan". Kemudian, sesederhana memilih dan mengeksekusi gerakan / aksi berdasarkan beberapa kombinasi keacakan dan tingkat kesulitan apa pun yang dipilih pemain di awal permainan.

Kemudian, setelah 500 milidetik, saya melakukannya lagi.

Itu tidak memiliki kemampuan belajar atau apa pun tetapi dengan tweaker yang cukup itu bisa sangat meyakinkan, yang penting

Gagege
sumber