Principe du fonctionnement de mon IA : .................................................... Dans la fonction think(), on mémorise à chaque coup l'état des capteurs, la liste des salles voisines, et on incrémente le nombre de visite de la salle. Puis "on regarde" ce qu'on doit faire en fonction des situations et on prépare 'le choix' à faire dans action(), sachant la fonction action() agit par priorité : - en 1er: gestion du cas "c'est Lourd" : retour vers la sortie, - sinon en 2: gestion du cas liste salles_brille non vide : on se "fixe" sur la salle [1] et on parcourt les salles [2] à [...] voisines de [1], - sinon en 3: gestion du cas liste chemin2go non vide : on parcourt le chemin prérempli - sinon en 4: gestion du cas liste lv_cur non vide : on choisit parmi les salles voisines dans lv_cur - puis pour éviter un bug de logique de l'IA, avant de sortir de la fonction action(), on vérifie que la salle choisie est bien voisine (IsValide2Go()), sinon on pioche dans la liste des salles voisines. .................................................... Principaux objectifs de l'IA: .................................................... * Retarder au maximum l'échéance de choisir une salle potentiellement dangereuse (Wumpus/Trappe), et tant qu'il n'y a ni danger, ni brillance : c'est de parcourir en profondeur le labyrinthe sans repasser par une salle déjà visitée, cela pour avoir une vue assez globale du labyrinthe. * Dès que c'est Lourd, on prend le chemin du retour (optimisation faite : si une salle voisine de la salle actuelle est sûre et est voisine d'une salle plus proche de la sortie (sur le chemin du retour) on prend le raccourci). * Si ça ne brille pas et si l'exploration en profondeur est bloquée (impasse, danger proche), on regarde si dans le chemin du retour : on peut de nouveau explorer des salles voisines sans danger, * Si ça brille et qu'il n'y a pas de danger proche, on 'se fixe' sur la salle où ça brille, et on explore les salles voisines jusqu'à trouver le coffre: on fait une salle voisine et si on n'a pas encore trouvé le coffre, on revient dans la salle où ça brille; petite optimisation : si dans une 'salle voisine', ça brille aussi, on se fixe sur cette dernière pour gagner un coup sur un retour. * Sinon, s'il y a des salles voisines sûres (sans danger) avec coffre possible, on y va. * Au fur et à mesure des visites de salles, on essaie de trianguler la position du wumpus, du coffre (parmi des voisines avec danger) ou celles des trappes: étant donné qu'il n'y a qu'un wumpus (ou qu'un coffre), dès qu'on le sent, on mémorise dans une liste les salles où il peut être salles_wumpus (salles_coffre) et au fur et à mesure de l'exploration, la liste des salles est amenée à se réduite : s'il ne reste qu'une salle : on l'a localisé : selon le besoin on laissera le wumpus vivant ou on le tuera pour libérer un passage; si on voit que le wumpus ne peut être que dans deux salles voisines de la salle courante, on lance le tir dans une salle puis on analyse le résultat de tir sur le wumpus au "mouvement" suivant : s'il est mort : c'est OK, s'il est vivant: il est localisé dans l'autre salle. On essaie de faire de même pour les trappes, mais ne connaissant pas leur nombre, on ne peut les localiser à coup sûr que si parmi les salles voisines il ne reste qu'une salle (resp 2) non explorée pouvant contenir une trappe (resp une trappe ET le wumpus). ....................................................