示例#1
0
        public int Minimax(PlateauRestreint p, bool maximizingPlayer)
        {
            int res;

            if (p.VerifierVictoire() == p.Joueur1)
            {
                // Victoire du joueur 1 : retourne 1.
                res = 1;
            }
            else if (p.VerifierVictoire() == p.Joueur2)
            {
                // Victoire du joueur 2 : retourne -1.
                res = -1;
            }
            else if (p.VerifierPlateauRempli())
            {
                // Match nul : retourne 0.
                res = 0;
            }
            else
            {
                // Not terminal node

                List <Position> positionsLibres = this.GetPositionsLibres(p);

                if (maximizingPlayer)
                {
                    // foreach child of node
                    res = -5000;
                    foreach (Position pos in positionsLibres)
                    {
                        // Création d'une copie de plateau
                        Morpion morpionClone = new Morpion();
                        morpionClone.Initialisation(p.Joueur1, p.Joueur2);
                        morpionClone.PlateauJeu = p.Clone(morpionClone);

                        morpionClone.Tour(pos.X, pos.Y);
                        res = Math.Max(res, this.Minimax(morpionClone.PlateauRestreint, false));
                    }
                }
                else
                {
                    // foreach child of node
                    res = +5000;
                    foreach (Position pos in positionsLibres)
                    {
                        // Création d'une copie de plateau
                        Morpion morpionClone = new Morpion();
                        morpionClone.Initialisation(p.Joueur1, p.Joueur2);
                        morpionClone.PlateauJeu = p.Clone(morpionClone);

                        morpionClone.Tour(pos.X, pos.Y);
                        res = Math.Min(res, this.Minimax(morpionClone.PlateauRestreint, true));
                    }
                }
            }

            return(res);
        }
示例#2
0
        /// <summary>
        /// Constructeur de la classe Morpion.
        /// </summary>
        public Morpion()
        {
            this.plateauJeu       = new Plateau(this);
            this.plateauRestreint = new PlateauRestreint(this.plateauJeu);
            this.listeJoueurs     = new List <Joueur>();

            // Initialisation des joueurs
            this.listeJoueurs.Add(new Joueur(1));
            this.listeJoueurs.Add(new Joueur(2));
        }
示例#3
0
        private List <Position> GetPositionsLibres(PlateauRestreint p)
        {
            List <Position> positionsLibres = new List <Position>();

            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (p.GetCase(i, j).Joueur == null)
                    {
                        positionsLibres.Add(new Position(i, j));
                    }
                }
            }
            return(positionsLibres);
        }
示例#4
0
 public IA_Parfaite(PlateauRestreint p) : base(p)
 {
 }
示例#5
0
 public IA(PlateauRestreint p)
 {
     this.plateau = p;
 }
示例#6
0
 public IA_Basique(PlateauRestreint p) : base(p)
 {
 }
示例#7
0
 public IA_Evoluee(PlateauRestreint p) : base(p)
 {
 }
示例#8
0
 public IA_Aleatoire(PlateauRestreint p) : base(p)
 {
 }