Cálculo de la trayectoria de misiles alrededor de las órbitas antes de disparar

10

Estoy construyendo un juego con Unity3D. Es un clon de Gravity Wars . Tanto las torretas de jugador como las de IA disparan misiles entre sí (dando un ángulo y una variable de potencia), tratando de no estrellar misiles en los planetas. Pero aquí está mi pregunta: ¿cómo hago que la IA calcule la potencia y el ángulo antes de disparar su misil, considerando la gravedad de un planeta también?

Onofrio
fuente

Respuestas:

5

Un sistema como este, con múltiples cuerpos, va a ser caótico. No creo que puedas resolver una ecuación en tiempo real. Lo mejor que puede esperar es encontrar una solución utilizando un algoritmo genético;

1: produce un número (por ejemplo, 100) de soluciones aleatorias (ángulo, pares de potencia).

2: simular estas soluciones.

3: si alguno de estos, termina golpeando el objetivo (o lo suficientemente cerca), ¡Listo! de lo contrario continuar.

4: elige las 10 mejores soluciones (las que terminan más cerca del objetivo)

5: a partir de estas 10 soluciones, cree 10 hijos para cada uno, ajustando al azar su ángulo y potencia.

6: ahora tiene 100 nuevas soluciones, regrese al paso 2

Deberá limitar el número de iteraciones, en caso de que no se encuentre una solución o de que la búsqueda tarde demasiado.

Incluso este enfoque no garantiza encontrar una buena solución porque; 1. la solución podría no existir 2. en un sistema caótico, pequeños cambios en una solución pueden tener un gran impacto en el resultado

Conocer
fuente
1

Debería poder simular un disparo, sin dibujarlo.

Entonces podría decir, simular 10 disparos y luego tomar el más cercano de los 10.

jgallant
fuente
0

Dado que la trayectoria del misil se basa en las entradas de Angley Power, debería poder resolver (obtener una respuesta exacta ) de una ecuación inversa.

Los pasos básicos de AI (psuedo) son los siguientes:

  1. Elige un Powernivel aleatorio . No importa cuál sea el valor exacto (hasta cierto punto), siempre que caiga en un rango razonable.
  2. Resuelva la ecuación (invertida de la ruta real) para dar la exacta (bueno, lo más cerca posible con dobles) Angle.
  3. Elija un desplazamiento aleatorio (modificable) del Angle, para ajustar la ' dificultad ' de la IA.
  4. Dispara el misil como lo haría un jugador, al (al azar) Powery (calculado) Angle.

Por supuesto, podría hacer que la IA dispare a niveles aleatorios para ambas entradas, lo que podría producir algunos resultados interesantes ...

Clockwork-Muse
fuente
Este método tiene mucho sentido cuando todo lo que tienes es la gravedad hacia abajo y un viento constante, pero ¿qué utilizas para una "ecuación para dar exactamente Angle" cuando tienes múltiples cuerpos gravitacionales dispersos a través de tu universo? Su atracción depende de su posición actual. Es posible que algunas vacunas ni siquiera sean posibles.
John McDonald el
@John: si un disparo es completamente imposible (descontando una mala elección de potencia de entrada), hay un serio problema con tu campo de juego. Con este tipo de juegos, cualquiera de los jugadores debería ser reemplazable por una IA. Por supuesto, las ecuaciones se vuelven más complicadas (y con múltiples cuerpos, muy rápidamente), pero aún así debería ser posible.
Clockwork-Muse
Lo suficientemente justo. ¿Pero sabes lo que usarías para una ecuación? Creo que por eso se creó esta pregunta.
John McDonald
John tiene razón: lo que estoy buscando es esa ecuación.
Onofrio
@Onofrio - Lo siento, no tengo las ecuaciones relevantes ... y parece que necesitas un cálculo multivariable para hacer esto "correctamente".
Clockwork-Muse el
0

¿Qué hay de hacerlo realista al no hacer que calculen, sino que comiencen con una suposición y se ajusten adecuadamente?

Cuando jugué a Gravity Wars, esto es lo que hice; comience con una potencia semialeatoria y ajústela en consecuencia en un incremento. En un par de disparos, te acercas mucho.

cenizas999
fuente