Imaginez un shoot-em-up très simple, quelque chose que nous savons tous:
Vous êtes le joueur (vert). Votre mouvement est limité à l' X
axe. Notre ennemi (ou ennemis) est en haut de l'écran, son mouvement est également limité à l' X
axe. Le joueur tire des balles (jaunes) sur l'ennemi.
J'aimerais implémenter une IA pour l'ennemi qui devrait être vraiment bonne pour éviter les balles des joueurs. Ma première idée a été de diviser l'écran en sections discrètes et de leur attribuer des poids:
Il y a deux poids: Le "poids de balle" (gris) est le danger imposé par une balle. Plus la balle est proche de l'ennemi, plus le "poids de la balle" ( 0..1
, où 1 est le plus grand danger). Les voies sans balle ont un poids de 0. Le deuxième poids est le "poids à distance" (vert lime). Pour chaque voie, j'ajoute le 0.2
coût de déplacement (cette valeur est maintenant un peu arbitraire et pourrait être modifiée).
Ensuite, j'ajoute simplement les poids (blancs) et je vais dans la voie avec le poids le plus bas (rouge). Mais cette approche a un défaut évident, car elle peut facilement manquer des minima locaux car l'endroit optimal où aller serait simplement entre deux balles entrantes (comme indiqué par la flèche blanche).
Voici donc ce que je recherche:
- Devrait trouver un moyen de traverser la tempête de balles, même quand il n'y a aucun endroit qui n'impose une menace de balle.
- L'ennemi peut esquiver les balles de manière fiable en choisissant une solution optimale (ou presque optimale).
- L'algorithme doit être en mesure de prendre en compte la vitesse de déplacement des balles (car elles peuvent se déplacer avec des vitesses différentes).
- Façons de modifier l'algorithme afin que différents niveaux de difficulté puissent être appliqués (idiot aux ennemis super-intelligents).
- L'algorithme devrait permettre des objectifs différents, car l'ennemi ne veut pas seulement échapper aux balles, il doit également pouvoir tirer sur le joueur. Cela signifie que les positions où l'ennemi peut tirer sur le joueur devraient être préférées lors de l'esquive des balles.
Alors, comment aborderiez-vous cela? Contrairement à d'autres jeux de ce genre, j'aimerais avoir seulement quelques ennemis, mais très "qualifiés" au lieu de masses d'ennemis stupides.