Menghitung lintasan rudal di sekitar orbit sebelum menembak

10

Saya membangun game dengan Unity3D. Ini adalah klon Gravity Wars . Baik pemain dan menara AI menembakkan rudal satu sama lain (memberikan sudut dan variabel Daya), berusaha untuk tidak menabrak rudal di planet. Tapi ini pertanyaan saya: bagaimana saya membuat AI menghitung daya dan sudut sebelum menembakkan misilnya, mengingat gravitasi planet juga?

Onofrio
sumber

Jawaban:

5

Sistem seperti ini, dengan banyak tubuh, akan kacau balau. Saya tidak berpikir bahwa Anda akan dapat menyelesaikan persamaan untuk itu secara real-time. Yang terbaik yang bisa Anda harapkan adalah menemukan solusi menggunakan algoritma genetika;

1: menghasilkan sejumlah (eg100) solusi acak (sudut, pasangan daya).

2: simulasikan solusi ini.

3: jika ada di antara ini, akhirnya mengenai sasaran (atau mendekati cukup), Selesai! jika tidak, lanjutkan.

4: pilih 10 solusi terbaik (solusi yang paling dekat dengan target)

5: dari 10 solusi ini, buat 10 anak untuk masing-masing, dengan menyesuaikan sudut dan kekuatan mereka secara acak.

6: sekarang Anda memiliki 100 solusi baru, kembali ke langkah 2

Anda perlu membatasi jumlah iterasi, jika tidak ada solusi yang ditemukan, atau terlalu lama untuk dicari.

Bahkan pendekatan ini tidak dijamin untuk menemukan solusi yang baik karena; 1. solusi mungkin tidak ada 2. dalam sistem yang kacau, perubahan kecil pada solusi dapat berdampak besar pada hasilnya

Ken
sumber
1

Anda harus dapat mensimulasikan tembakan, tanpa menggambarnya.

Lalu Anda bisa mengatakan, mensimulasikan 10 tembakan, dan kemudian mengambil yang terdekat dari 10.

jallan
sumber
0

Mengingat bahwa lintasan rudal didasarkan pada input Angledan Power, Anda harus dapat menyelesaikan (mendapatkan jawaban yang tepat ) dari persamaan terbalik.

Langkah-langkah dasar (psuedo) AI adalah sebagai berikut:

  1. Pilih Powertingkat acak . Tidak masalah apa nilai pastinya (sampai batas tertentu), asalkan jatuh dalam kisaran yang masuk akal.
  2. Memecahkan persamaan (terbalik dari pathing sebenarnya) untuk memberikan yang tepat (well, sedekat mungkin dengan ganda) Angle.
  3. Pilih beberapa offset acak (yang dapat dimodifikasi) dari Angle, untuk menyesuaikan ' kesulitan ' AI.
  4. Menembak rudal seperti yang dilakukan pemain, di (acak) Powerdan (dihitung) Angle.

Anda tentu saja dapat memiliki AI AI pada level acak untuk kedua input, yang dapat menghasilkan beberapa hasil menarik ...

Clockwork-Muse
sumber
Metode ini sangat masuk akal ketika semua yang Anda miliki adalah gravitasi lurus ke bawah dan angin konstan, tetapi apa yang Anda gunakan untuk "persamaan untuk memberikan yang tepat Angle" ketika Anda memiliki banyak benda gravitasi yang tersebar di seluruh alam semesta Anda? Tarikan mereka tergantung pada posisi Anda saat ini. Beberapa pemotretan bahkan mungkin tidak dapat dilakukan.
John McDonald
@ John - Jika pemotretan benar - benar tidak mungkin (mengabaikan pilihan daya input yang buruk), ada masalah serius dengan playfield Anda. Dengan jenis permainan ini, salah satu pemain harus diganti dengan AI. Memang, persamaan menjadi lebih rumit (dan dengan banyak benda, sangat cepat), tetapi itu masih harus dimungkinkan.
Clockwork-Muse
Cukup adil. Tapi tahukah Anda apa yang akan Anda gunakan untuk persamaan? Saya pikir itu sebabnya pertanyaan ini dibuat.
John McDonald
John benar: yang saya cari adalah persamaan itu.
Onofrio
@ Onofrio - Maaf, saya tidak memiliki persamaan yang relevan ... dan sepertinya Anda perlu kalkulus multi-variabel untuk melakukan ini 'dengan benar'.
Clockwork-Muse
0

Bagaimana membuatnya realistis dengan tidak membuat mereka menghitung, tetapi mulai dengan menebak dan menyesuaikan dengan tepat?

Ketika saya memainkan Gravity Wars, inilah yang saya lakukan; mulai dengan kekuatan semi-acak, dan sesuaikan dengan kenaikan. Dalam beberapa tembakan, Anda menjadi sangat dekat.

ashes999
sumber