Imagina un shoot-em-up muy simple, algo que todos sabemos:
Eres el jugador (verde). Su movimiento está restringido al X
eje. Nuestro enemigo (o enemigos) está en la parte superior de la pantalla, su movimiento también está restringido al X
eje. El jugador dispara balas (amarillas) al enemigo.
Me gustaría implementar una IA para el enemigo que debería ser realmente buena para evitar las balas de los jugadores. Mi primera idea fue dividir la pantalla en secciones discretas y asignarles pesos:
Hay dos pesos: el "peso de la bala" (gris) es el peligro impuesto por una bala. Cuanto más cerca esté la bala del enemigo, mayor será el "peso de la bala" ( 0..1
donde 1 es el mayor peligro). Los carriles sin bala tienen un peso de 0. El segundo peso es el "peso de distancia" (verde lima). Para cada carril agrego el 0.2
costo de movimiento (este valor es un poco arbitrario ahora y podría modificarse).
Luego simplemente agrego los pesos (blanco) y voy al carril con el peso más bajo (rojo). Pero este enfoque tiene una falla obvia, porque puede pasar por alto los mínimos locales, ya que el lugar óptimo para ir sería simplemente entre dos balas entrantes (como se indica con la flecha blanca).
Entonces, esto es lo que estoy buscando:
- Debería encontrar un camino a través de la tormenta de balas, incluso cuando no haya un lugar que no imponga la amenaza de una bala.
- El enemigo puede esquivar balas de manera confiable eligiendo una solución óptima (o casi óptima).
- El algoritmo debería ser capaz de tener en cuenta la velocidad de movimiento de la bala (ya que podrían moverse con diferentes velocidades).
- Formas de ajustar el algoritmo para que se puedan aplicar diferentes niveles de dificultad (tontos a enemigos súper inteligentes).
- El algoritmo debe permitir diferentes objetivos, ya que el enemigo no solo quiere evadir las balas, sino que también debe poder disparar al jugador. Eso significa que las posiciones donde el enemigo puede disparar al jugador deben preferirse al esquivar balas.
Entonces, ¿cómo abordarías esto? Al contrario de otros juegos de este género, me gustaría tener solo unos pocos, pero muy "hábiles" enemigos en lugar de masas de enemigos tontos.