Nuevo en la creación de IA: ¿por dónde empezar? [cerrado]

58

Soy nuevo en la programación de juegos y estoy tratando de hacer un juego espacial 2D de arriba hacia abajo con 2 naves espaciales que luchan entre sí. Me está yendo bien con la nave espacial controlada por el usuario, pero no tengo idea de cómo comenzar a programar una IA. ¿Son ciertos métodos / patrones mejores para esta situación? ¿Por dónde empezaría?

jle
fuente
1
Aquí están mis diapositivas sobre IA del curso que hice: sol.gfxile.net/gpc/05ai.pdf
Jari Komppa
44
si declaraciones. muchos de ellos.
deceleratedcaviar

Respuestas:

27

Si es la primera vez que desarrolla IA, no tiene que preocuparse por cosas como el patrón de estado, las matemáticas de comportamiento o incluso obtener un libro sobre el tema.

Literalmente puede salirse con la suya con algo como esto:

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

El aspecto principal de hacer que la IA sea correcta es pensar qué comportamientos desea que tenga el personaje y cómo se puede lograr de manera realista. Entonces, para un enemigo espacial básico, me imagino que las posibles acciones que podría llevar a cabo serían:

  • Moverse
  • Fuego
  • Huir

¿Y cuándo podrían suceder estas acciones?

  • Muévete: nada más que hacer
  • Fuego: cuando veo un enemigo
  • Huir - Cuando tengo poca salud / Cuando estoy tomando fuego / etc.

Después de haber hecho esto debido al bajo número de "estados" en los que puede estar tu personaje, puedes usar una declaración if simple como la de arriba. Entonces, le recomendaría que observe los Comportamientos de dirección, ya que estos son comportamientos muy simples de implementar y pueden resultar en un movimiento realmente atractivo.

Puede encontrar más aquí: http://www.red3d.com/cwr/steer/
Y definitivamente recomendaría el libro de Mat Buckland Programming Game AI By Example , especialmente cuando está comenzando.

Cuando se sienta realmente cómodo con esto, le sugiero que mire los Patrones de Estado y Estrategia.

El punto es comenzar pequeño y simple. No se preocupe por todos estos términos que todo el mundo sigue hablando sobre FSM y patrones de diseño y lo que sea. Primero diseñe y cree, luego preocúpese por cómo puede mejorarlo utilizando los métodos o estándares existentes.

¡Espero que ayude!

Ray Dey
fuente
@Fuu Saludos para el compañero de edición :)
Ray Dey
9

Es posible que desee ver OpenSteer y la documentación de Comportamientos de dirección que lo acompaña. El código fuente no es de nivel principiante, pero los conceptos detrás de él deberían darle algunas buenas ideas.

AShelly
fuente
¿La gente usa OpenSteer en los juegos o es más para simulaciones?
jle
Al menos estoy tratando de usarlo en un juego en desarrollo. Me está funcionando bien hasta ahora. Creo que el autor desarrolló gran parte de él mientras trabajaba para el grupo Playstation en Sony: es probable que se convirtiera en algunos juegos. MobyGames lo enumera en los créditos de JohnMadden Football y uno de los juegos de Leisure Suit Larry.
AShelly
FreeOrion está utilizando OpenSteer en su motor de combate táctico.
Mike Strobel
1
+1 Por mencionar Openteer. Si desea ver algunos excelentes ejemplos de la combinación de comportamientos muy simples para formar algo que se ve muy complejo e intrincado. ¡Verifique los comportamientos de dirección! Google, "Boids" y mira algunos usos geniales. No es tranquilo lo que quiere, pero le mostrará que de simplicidad viene la complejidad
onedayitwillmake
9

Es posible que desee ver el patrón de diseño de la Estrategia . Esencialmente escriba las mismas estrategias básicas de cómo se comportarán los barcos:

  • Acércate al objetivo
  • Objetivo de ataque
  • Huir del objetivo
  • Avanzar hacia power-ups
  • Usa potenciadores

Luego usará la lógica (máquinas de estado) para elegir entre estas estrategias. Por ejemplo: si los escudos de las naves han caído por debajo del 50%, huye del objetivo y avanza hacia potenciadores / objetos curativos, etc.

Bryan Denny
fuente
1
así que cada vez que pasa por el ciclo del juego, decide cuál de esas 'estrategias' tiene prioridad y luego ejecuta eso.
jle
@jle Bastante. Por lo tanto, cada una de sus estrategias se dividirá en sus propias clases, manteniendo su código organizado.
Bryan Denny el
7

¿Puedo sugerirle que compre el libro Inteligencia artificial para juegos de Ian Millington, es excelente! :) http://www.ai4g.com/

El código fuente está en Github - licencia MIT.

Por supuesto, si no está usando C / C ++, entonces esto podría ser menos relevante.

Pero realmente una introducción increíble al mundo de la estupidez / inteligencia artificial.

Lo que necesitará de él son máquinas de dirección y de estado. Para principiantes.

jacmoe
fuente
2

Algunos consejos prácticos si elige máquinas de estado: tenga cuidado con el megaestado.

Es tentador tener un estado de "huir" que maneja establecer una posición para huir, establecer una alta velocidad objetivo, eliminar todos los objetivos, etc. máquina de estado que maneja la selección de una posición de destino, una que maneja armas, etc.

Esto puede parecer estúpido, ya que tendría que agregar estados de fuga a cada máquina individual, pero dado que está limitado a solo una o dos salidas, sus estados terminan siendo muy pequeños, por lo que esto no debería ser un problema.

Además, dado que cada control está ahora bajo control individual, puede terminar seleccionando una posición de objetivo de huida mientras el estado de ataque controla sus armas. Puede atacar a un enemigo mientras conserva la potencia del motor debido a una fuga de refrigerante. Puede conducir para evitar una colisión mientras sigue descargando contramedidas. Todo esto sería imposible con una sola máquina de estado que lo abarque todo.

tenpn
fuente
2

Matemáticas conductuales para el juego AI

Agregar este libro a la lista de puntos de partida para aprender programación de IA. Con su enfoque en la implementación de observación y comportamiento en lugar de algoritmos de aplicación limitada, creo que es muy adecuado para la tarea.

Jay Bell
fuente
1

Cómo crear IA es una pregunta difícil, porque consta de muchas partes:

  • Eliges una arquitectura / paradigma general para tu IA. ¿Se basa en guiones? ¿Utilizará la planificación? ¿Es un simple FSM o prefieres BT?
  • Luego, aplica estos paradigmas con una implementación específica / conjunto de herramientas.
  • Ahora, te quedan opciones de diseño de juegos, ya que tienes que pensar en los comportamientos que usará tu arquitectura.

Otros carteles sugirieron grandes libros y soy aficionado a AI4Games sugerido por jacmoe, aunque es bastante general en algunas partes (como muchos libros, lo que por supuesto es comprensible).

Por supuesto, cada tipo de juego tiene sus necesidades específicas, y los juegos arcade / shooter no necesitan arquitecturas complejas para admitir un juego interesante. Las librerías de dirección simples harán el trabajo como base de ese comportamiento, y luego agregará detalles para varios tipos de enemigos (algunos, disparan periódicamente, algunos disparan prediciendo el movimiento del jugador, algunos giran para enfrentar al enemigo, otros pueden coordinar sus ataques, etc.)

  • Creo que la mejor manera de aprender sobre la codificación de juegos (AI) es mirar un código bueno y en ejecución. ¡Entonces, explore ohloh.net y github y busque proyectos FOSS existentes!
  • Por supuesto, puedes elegir el parte difícil y jugar un juego existente (pero simple). Intente realizar ingeniería inversa del comportamiento y piense "¿Cómo diseñaría esto?". Por supuesto, las sugerencias siempre ayudan, y probablemente es por eso que preguntaste aquí en gamedev.SE!
  • ¡Algo intermedio es mirar también los juegos de disparos existentes en los foros de GameMaker! ¡Puedes encontrar muchos guiones simples que harán el truco! ;)
Astyanax
fuente
1

Piensa en lo que haces cuando juegas. Hazte algunas preguntas.

  • ¿Qué información necesito para poder tomar una decisión?
  • ¿Cuándo reacciono a los cambios?
  • ¿Cuáles son mis objetivos a "largo plazo" en esta sesión de juego en particular?

Luego, lo que hago es que la IA mire el campo de juego y haga una lista de posibles acciones o movimientos que la IA podría hacer en función de esas preguntas. Clasifico y clasifico estos movimientos con un "factor de inteligencia". Entonces, es tan simple como elegir y ejecutar un movimiento / acción basado en una combinación de aleatoriedad y cualquier nivel de dificultad que el jugador eligió al comienzo del juego.

Luego, después de 500 milisegundos, lo vuelvo a hacer.

No tiene habilidades de aprendizaje ni nada, pero con suficientes ajustes puede ser bastante convincente, lo que realmente importa

Gagege
fuente