2010-10-04 16 views
5

Saludos a todos,Vuelo algoritmo de juego AI?

Estoy en la fase de diseño de uno de mis proyectos de hobby. Voy a desarrollar un juego de combate aéreo en 3D. (inspirado en HAWX). Pero me pregunto cómo funciona la IA para las naves enemigas. Supongo que no se mueven a lo largo de un camino (búsqueda de ruta en un gráfico) como en los juegos de FPS. ¿Qué tipo de algoritmos puedo usar para el movimiento de naves enemigas? ¿Hay alguna biblioteca de AI que pueda usar para esto?

Nota: utilizo irrlicht engine, C++ como mi entorno de desarrollo.

Respuesta

4

Una respuesta sencilla para encontrar un punto de intercepción ...

En cualquier punto en el tiempo, hacer una suposición de líneas rectas. Usted y su objetivo viajan en línea recta a velocidades fijas. Por lo tanto, puedes restar tu posición y movimiento de tus objetivos, y trabajar con la posición relativa y la velocidad de los objetivos.

Un punto interesante en el tiempo es cuando su objetivo está tan cerca (en esa línea) como siempre: el punto más cercano en esa línea. IIRC, que se puede calcular con productos escalares de vectores ...

 P . V 
t = - ----- 
     V . V 

Suponiendo que tengo ese derecho, en este punto el camino objetivos es en ángulo recto a la línea de usted a la diana (no el mismo que el ángulo entre su y sus movimientos). Podrías obtener una respuesta equivalente usando trigonometría (un producto escalar está relacionado con el coseno), e incluso lo resolví (sin saberlo) usando un método de ecuaciones simultáneas una vez, para un juego 2D que comencé pero nunca terminé hace muchos años. (piense en el combate entre los oidos/estilo de empuje giran y empujan los buques con la gravedad).

De esto, puede determinar dónde está el punto más cercano y qué tan lejos está.

Calcule este tiempo para pequeñas variaciones en su velocidad y dirección actuales y puede optimizar iterativamente para una intercepción futura. Por supuesto, la minimización de t trae consigo la posibilidad de que t se pueda adentrar aún más en el pasado: ¡huir! Tal vez minimizar la t squared sería mejor, pero luego tienes otras complicaciones: si el enemigo está justo detrás de ti, ¿realmente quieres reducir la velocidad?

De todos modos, esto es probablemente suficiente para un simple misil guiado, pero por supuesto muy poco uso en un combate aéreo. Mi impresión de eso es más como una especie de ajedrez analógico en tiempo real donde no se puede ver la mayoría del tablero la mayor parte del tiempo. No se puede minimizar eso, obviamente, por lo que se necesita un modelo de mayor nivel de los movimientos que el joystick y otras configuraciones de control. Eso requerirá un poco de investigación sobre las tácticas basadas en la experiencia humana antes de que comiences a diseñar un motor de inteligencia artificial para ello.

Sin embargo, para explotar la cobertura en el terreno, probablemente puedas hacer algo mucho más simple. Un buscador de rutas basado en gráficos puede ser relevante para trazar una ruta a través de valles. Realice la mayor parte de la ruta en 2D, y modifique el mapa de manera relativamente suave; las variaciones "mienten" para asegurarse de no volar directamente hacia un acantilado.

Probablemente necesite un sistema de diferentes tipos de objetivos y tácticas, con una forma de ponderar y elegir entre ellos. Muy lejos de tu objetivo, es más probable que intentes mantenerte tapado que cuando te acercas. Cuando tienes un misil en tu propia cola, eso tendrá prioridad sobre cualquier acción ofensiva que puedas tomar, y así sucesivamente.

BTW - nada de esto es por la experiencia real en el desarrollo de juegos (y ciertamente nunca he sido piloto de ninguna descripción) así que trátenlo son sugerencias vagas que pueden no funcionar.Y cuidado, una de las razones por las que nunca finalizó mi juego en 2D fue porque tratar de descifrar el código AI al principio fue tan interesante, luego más frustrante, es tan molesto cuando la única forma en que tu mejor intento de IA puede superarte es mediante teniendo muchas más naves y un suministro infinito de munición.

+0

Hola, steve gracias por los consejos. En realidad, mi pregunta no es específica. Creo que tengo que mantener una máquina de estado para los estados enemigos. (por ejemplo: ataque bulidings, jugador de ataque, jugador de persecución, defensa de misiles de jugador ... etc). Y depende del estado en que se debe cambiar el algoritmo. Me pregunto cómo implementaron AI en juegos como H.A.W.X. –

+0

No creo que puedas ignorar la velocidad absoluta. El medio (aire) está en reposo y tiene una gran influencia sobre cómo puede maniobrar. – ziggystar

+0

@ziggystar: el cálculo del punto más cercano supone una velocidad constante. Para elegir variaciones menores para la optimización, tiene sentido tener en cuenta los límites aproximados de la aeronave simulada, pero esto es para establecer un * objetivo *, sin decidir lo que la aeronave realmente logrará. Decidir el rendimiento real del avión es el trabajo del motor de física, no el del AI. Una IA más sofisticada puede necesitar un modelo complejo de la física, pero no se trata de física, sino de IA, y de una IA muy simple. – Steve314