public void Demarrage() { // Récupération des données des combobox var minMax = (minMaxBox.SelectedItem as ComboBoxItem).Tag.ToString(); var profondeur = (profondeurBox.SelectedItem as ComboBoxItem).Tag.ToString(); // Initialisation des données var game = new Jeu(); game.Ligne = 6; game.Colonne = 7; game.Statut = Statuts.EnCours; game.Profondeur = int.Parse(profondeur); game.Score = 100000; game.NbrPointsGagnant = 4; if(minMax != "MinMax") { game.EstAlphaBeta = true; } // Initialisation du jeu puissance4 = new Puissance4(game, new int?[game.Ligne, game.Colonne], 0); // Si que IA while (AffichageMessageFin(puissance4.VerifierJeu()){ JoueurMachineAlgo(); } }
/// <summary> /// Méthode qui implémente le min (minimax) /// </summary> /// <param name="puissance4"></param> /// <param name="profondeur"></param> /// <param name="a">Alpha</param> /// <param name="b">Beta</param> /// <returns></returns> private List <int?> Min(Puissance4 puissance4, int profondeur, int?a = null, int?b = null) { var points = puissance4.CompteurPoints(); // Si le jeu est terminée on retour une liste null if (puissance4.EstTermine(profondeur, points)) { return(new List <int?>() { null, points }); } var minimumPoints = new List <int?>() { null, 99999 }; for (var colonne = 0; colonne < puissance4.jeu.Colonne; colonne++) { // Création d'une copie du jeu (on doit clôner la matrice sinon il y a une référence) var copiePuissance4 = new Puissance4(puissance4.jeu, (int?[, ])puissance4.matrice.Clone(), puissance4.joueur); // On essaye de positionner le pion dans une colonne de la copie du puissance4 if (copiePuissance4.Placer(colonne).Item1) { var prochainCoup = Max(copiePuissance4, profondeur - 1, a, b); if (minimumPoints[0] == null || prochainCoup[1] < minimumPoints[1]) { minimumPoints[0] = colonne; minimumPoints[1] = prochainCoup[1]; b = prochainCoup[1]; } if (a >= b && jeu.EstAlphaBeta) { return(minimumPoints); } } } return(minimumPoints); }