école d’ingénieurs du littoral Intelligence Artificielle : TP 4 Contexte : Jeu Puissance 3 Le but de ce TP est de programmer une intelligence artificielle permettant à un joueur d’affronter une machine. Il s’agira d’aligner 3 pions en horizontal ou en vertical (pas en diagonal) sur une grille de 5 ∗ 5. 1 1 Début du jeu 2 2 Situation intermédiare du jeu 1 2 1 1 1 1 2 2 Situation finale du jeu : Le joueur 1 a gagné L’algorithme devra étre basé sur l’algorithme Alpha-Beta vu en cours. Implémentation Votre projet sera constitué de 3 principales classes : 1. la classe Noeud qui correspond à un état donné du jeu, ses successeurs et son évaluation. 2. la classe Puissance3 contenant les méthodes du jeu. 3. la classe Main pour simuler une partie du jeu ”humain/machine”. Voici une proposition d’un diagramme de classes pour implémenter le jeu 1 Puissance3 Noeud -matrice: int[][] -successeurs: ArrayList<Noeud> -max: boolean -noColonne: int -feuille: boolean -h: int +Noeud() +Noeud(max:boolean,matrice:int[][]) +Noeud(max:boolean,matrice:int[][],nColonne:int) +getSuccesseurs(): ArrayList<Noeud> +setSuccesseurs(successeurs:ArrayList<Noeud>) +getSuccesseur(i:int): Noeud +addSuccesseur(n:Noeud) +getH(): int +setH(h:int) +getMatrice(): int[][] +setMatrice(matriceJeu:int[][]) +isMax(): boolean +setMax(max:boolean) +isFeuille(): boolean +setFeuille(feuille:boolean) +getNoColonne(): int +setNoColonne(noColonne:int) +print() +evaluer() -matriceJeu: int[][] -WIDTH: int = 5 -HEIGHT: int = 5 +Puissance3() +jouer(typeJoueur:boolean,colonne:int): boolean +jouer(typeJoueur:boolean,colonne:int,matriceJeu:int[][]): boolean +estFinJeu(typeJoueur:boolean): boolean +creerArbreSituation(n:Noeud,profondeur:int) +resolution(n:Noeud,alpha:int,beta:int) +print() +copieMatrice(mSource:int[][],mDest:int[][]) Main +static main(args:String[] ) Méthodes de classe Puissance3 — jouer(typeJoueur : boolean, colonne : int) : boolean : jouer le coup d’un joueur (humain ou ordinateur) à une colonne donnée. la méthode retrourne false si le coup n’est pas faisable sinon elle retourne true — jouer(typeJoueur : boolean, colonne : int, matrice : int[][]) : boolean : jouer le coup d’un joueur (humain ou ordinateur) à une colonne donnée sur la matrice passée en paramètre. la méthode retrourne false si le coup n’est pas faisable sinon elle retourne true — estFinJeu(typeJoueur : boolean) : boolean : la méthode retourne true si la partie du jeu s’est terminée (grille remplie ou bien le joueur passé en paramètre a gagné) — creerArbre(n :Noeud, profondeur :int) crée un arbre à une certaine profondeur à partir de la situation du jeu courant. A l’initialisation du jeu, on prend une profondeur égale à 4. — resolution(n : Noeud , alpha : int, beta : int) :int : retourne l’évaluation du meilleur coup possible pour l’ordinateur. Ce coût est calculé grâce à l’algorithme Alpha-Beta. 3