L'intelligence artificielle

Stratégie

La stratégie du joueur ordinateur est partagée en trois modes de comportement:

Normalement on se trouve dans le mode chercher. Mais dés qu'on pose une bombe, on change dans le mode cacher et y reste jusqu'il n'y a plus de bombes sur la carte. Si quelqu'un pose une bombe pendant qu'on se trouve dans le mode cacher, on cherche une nouvelle position en sécurité des bombes, car parfois la vieille position n'est plus en sécurité.

Si un bonus apparaît est on n'est pas dans le mode cacher, on change dans le mode bonus et commence à collectionier les bonus par le plus proche. S'il n'y plus de bonus on change en mode chercher.

Si la position du joueur ordinateur est identique à celle de l'ennemi, on essai de poser une bombe.

Pour trouver une position en sécurité des bombes, nous avons fait une méthode chercheSecurite() qui contrôle tous les blocks libres autour du joueur ordinateur tel que la distance pour aller en sécurité est la plus courte possible.

Pour que le joueur ordinateur puisse faire ce qu'on désire, nous avons implémenté l'algorithme A-Star qui cherche les chemins les plus éfficaces.

Parcque A-Star fait quelques calculations qui coutent du temps, on a introduit quelques variables de contrôle tel qu'on calcule en maximum un chemin dans agir() pour que le jeu n'est pas ralentissé.

Implementation de A-Star

Généralement dit, A-Star calcule pour tous les blocks de la carte un valeur spécifique (distance du block de départ) en commençant par le block de départ et en controllant toujours les voisins du block actuel. Et puis A-Star trouve un chemin en avançant du block final jusqu'au block de départ tel que toujours le block voisin avec le plus petit valeur spécifique est ajouté au chemin.

Tous ça travaille avec deux listes (chez nous Vectors) dont une contient le blocks à contrôler (ouvert) et l'autre les blocks contrôlé (controle).

Pour accélerer un peu le processus de recherche, nous avons écrit l'argorithme tel qu'il calcule la distance du block de la liste ouvert qui est le plus proche au block final. Comme ça on calcule le valeur spécifique que pour les blocks qui se trouve en direction du block final et pas pour tous les blocks de la carte.