Calcolo della traiettoria missilistica attorno alle orbite prima di sparare


10

Sto costruendo un gioco con Unity3D. È un clone di Gravity Wars . Entrambe le torrette giocatore e AI si lanciano missili l'uno contro l'altro (dando un angolo e una potenza), cercando di non far cadere i missili sui pianeti. Ma ecco la mia domanda: come faccio a fare in modo che l'IA calcoli la potenza e l'angolazione prima di sparare al suo missile, considerando anche la gravità di un pianeta?

Risposte:


5

Un sistema come questo, con più corpi, sarà caotico. Non penso che saresti in grado di risolvere un'equazione in tempo reale. Il meglio che puoi sperare è trovare una soluzione usando un algoritmo genetico;

1: produce un numero (es. 100) di soluzioni casuali (angolo, coppie di potenza).

2: simula queste soluzioni.

3: se uno qualsiasi di questi, finisce per colpire il bersaglio (o avvicinarsi sufficientemente), Fatto! altrimenti continua.

4: scegli le 10 migliori soluzioni (quelle che finiscono più vicino al bersaglio)

5: da queste 10 soluzioni, crea 10 bambini per ciascuno, regolando casualmente l'angolazione e la potenza.

6: ora hai 100 nuove soluzioni, torna al passaggio 2

Dovrai limitare il numero di iterazioni, nel caso in cui non sia possibile trovare una soluzione o impieghi troppo tempo a cercare.

Anche questo approccio non è garantito per trovare una buona soluzione perché; 1. la soluzione potrebbe non esistere 2. in un sistema caotico, piccole modifiche a una soluzione possono avere un impatto enorme sul risultato


1

Dovresti essere in grado di simulare uno scatto, senza disegnarlo.

Quindi potresti dire, simulare 10 colpi e poi prendere il più vicino dei 10.


0

Dato che la traiettoria del missle si basa sugli input di Anglee Power, dovresti essere in grado di risolvere (ottenere una risposta esatta ) da un'equazione inversa.

I passaggi di base (psuedo) AI sono i seguenti:

  1. Scegli un Powerlivello casuale . Non importa quale sia il valore esatto (fino a un certo punto), purché rientri in un intervallo ragionevole.
  2. Risolvi l'equazione (invertita dal percorso effettivo) per dare l' esatto (beh, il più vicino possibile con i doppi) Angle.
  3. Scegli un offset casuale (modificabile) da Angle, per regolare la " difficoltà " dell'IA.
  4. Spara il missile come farebbe un giocatore, a (casuale) Powere (calcolato) Angle.

Ovviamente potresti avere il fuoco dell'IA a livelli casuali per entrambi gli ingressi, il che potrebbe produrre alcuni risultati interessanti ...


Questo metodo ha perfettamente senso quando tutto ciò che hai è la gravità verso il basso e un vento costante, ma cosa usi per una "equazione per dare l'esatto Angle" quando hai più corpi gravitazionali sparsi nel tuo universo? Il loro tiro dipende dalla posizione attuale. Alcuni scatti potrebbero non essere nemmeno possibili.
John McDonald,

@John - Se uno scatto è del tutto impossibile (scontando una scarsa scelta della potenza in ingresso), c'è un serio problema con il tuo campo di gioco. Con questi tipi di giochi, ognuno dei giocatori dovrebbe essere sostituibile con un'intelligenza artificiale. Certo, le equazioni diventano più complicate (e con più corpi, molto rapidamente), ma dovrebbe essere ancora possibile.
Clockwork-Muse

Giusto. Ma sai cosa useresti per un'equazione? Penso che sia per questo che questa domanda è stata creata.
John McDonald,

John ha ragione: quello che sto cercando è quell'equazione.
Onofrio,

@Onofrio - Mi dispiace, non ho le equazioni pertinenti ... e sembra che tu abbia bisogno di un calcolo multi-variabile per farlo "correttamente".
Clockwork-Muse

0

Che ne dici di renderlo realistico non facendoli calcolare, ma iniziando con un'ipotesi e regolando in modo appropriato?

Quando ho giocato a Gravity Wars, questo è quello che ho fatto; inizia con una potenza semi-casuale e regola di conseguenza con un incremento. In un paio di colpi, ti avvicini molto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.