/// <summary>
        /// Construit un coup coté
        /// </summary>
        /// <param name="attaquant">Coordonnée de l'attaquant</param>
        /// <param name="cible">Coordonnée de la cible</param>
        /// <param name="jeu">Grille du jeu</param>
        /// <param name="couleurIA">Couleur de l'intelligence artificielle</param>
        public CoupCote(Coordonnee attaquant, Coordonnee cible, GrilleJeu jeu, Couleur couleurIA)
        {
            Jeu       = jeu;
            CouleurIA = couleurIA;

            Attaquant = attaquant;
            Cible     = cible;

            PieceAttaquant = jeu.ObtenirPiece(attaquant);
            PieceCible     = jeu.ObtenirPiece(cible);

            CalculerCote();
        }
示例#2
0
 /// <summary>
 /// Construit une case de jeu
 /// </summary>
 /// <param name="type">Le type de la case (terrain, lac, etc.)</param>
 /// <param name="grilleJeu">La grille de jeu dans laquelle on met la case</param>
 public CaseJeu(string type, GrilleJeu grilleJeu)
 {
     TypeCase  = type;
     GrilleJeu = grilleJeu;
 }
        /// <summary>
        /// Construction du contrôleur
        /// </summary>
        /// <param name="parametres">Paramètres en provenance du contrôleur précédent</param>
        public void Construire(Dictionary <string, ParametresConstruction> parametres)
        {
            CouleurJoueurs = (ParametresCouleurJoueurs)parametres["Couleur joueurs"];

            grdPartie.IsEnabled = true;

            EstPartieTerminee = false;
            EstDebutPartie    = true;

            GrillePartie = new GrilleJeu(CouleurJoueurs.CouleurJoueur, this);

            ConteneurPiecesCapturees = new ConteneurPiecesCapturees(stpPiecesCapturees);

            // Initialise la liste d'observateurs.
            observers = new List <IObserver <JeuStrategoControl> >();

            // Initialiser l'IA.
            IA = new IA_Stratego(this, CouleurJoueurs.CouleurIA);

            DiviserGrilleJeu();
            ColorerGrilleJeu();
            DefinirZoneSelectionGrille();
            InitialiserSelectionActive();

            if (!PositionnerPieces(((ParametresPiecesJoueur)parametres["Pieces"]).Pieces))
            {
                MessageBox.Show("Nombre de pièces ou couleurs invalide(s).", "Erreur", MessageBoxButton.OK, MessageBoxImage.Error);
                GestionnaireEcransJeu.ChangerEcran("Accueil");
            }
            InitialiserAffichagePieces();

            #region Tests

            // Code des tests initiaux.

            /*
             * ReponseDeplacement deplacement;
             *
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(0, 6), new Point(0, 5)); // Deplacement
             *
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(0, 5), new Point(-1, 5)); // Coord invalide
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(2, 6), new Point(2, 5)); // Lac
             *
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(2, 6), new Point(3, 6)); // Piece vs sa propre couleur
             *
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 6), new Point(1, 5));
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 5), new Point(1, 4));
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 4), new Point(1, 3)); // Prise par attaquant
             *
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 3), new Point(1, 2));
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 2), new Point(1, 1));
             * // deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 1), new Point(1, 0)); // 2 pièces éliminées
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(1, 1), new Point(2, 1));
             * deplacement = GrillePartie.ResoudreDeplacement(new Point(2, 1), new Point(2, 0)); // Attaquant éliminé
             */

            #endregion

            TourJeu = Couleur.Rouge;

            if (!GrillePartie.VerifierDeplacementsBombes(CouleurJoueurs.CouleurJoueur))
            {
                TerminerPartie();
                MessageBox.Show("Vous avez perdu (aucun mouvement possible)...", "Échec");
            }

            if (!GrillePartie.VerifierDeplacementsBombes(CouleurJoueurs.CouleurIA))
            {
                TerminerPartie();
                MessageBox.Show("Vous avez gagné (aucun mouvement possible)!", "Victoire");
            }

            // Lancer l'IA
            if (CouleurJoueurs.CouleurIA == Couleur.Rouge)
            {
                new Thread(LancerIA).Start();
            }
        }
示例#4
0
        /// <summary>
        /// Trouve les coups que l'IA peut jouer
        /// </summary>
        /// <param name="grillePartie">La grille de jeu</param>
        /// <returns>Liste des coups que l'IA peut jouer</returns>
        private List <CoupCote> TrouverCoupsPermis(GrilleJeu grillePartie)
        {
            List <CoupCote> listeCoups = new List <CoupCote>();
            Coordonnee      pointDepart, pointCible;

            for (int i = 0; i < GrilleJeu.TAILLE_GRILLE_JEU; i++)
            {
                for (int j = 0; j < GrilleJeu.TAILLE_GRILLE_JEU; j++)
                {
                    pointDepart = new Coordonnee(i, j);

                    if (Jeu.GrillePartie.EstCaseOccupee(pointDepart) &&
                        Jeu.GrillePartie.ObtenirCouleurPiece(pointDepart) == Couleur)
                    {
                        if (Jeu.GrillePartie.ObtenirPiece(pointDepart) is Eclaireur)
                        {
                            // Valider les coups vers la gauche.
                            for (int k = pointDepart.X; k >= 0; k--)
                            {
                                pointCible = new Coordonnee(k, pointDepart.Y);
                                if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                                {
                                    listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                                }
                            }
                            // Valider les coups vers le haut.
                            for (int k = pointDepart.Y; k >= 0; k--)
                            {
                                pointCible = new Coordonnee(pointDepart.X, k);
                                if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                                {
                                    listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                                }
                            }
                            // Valider les coups vers la droite.
                            for (int k = pointDepart.X; k < GrilleJeu.TAILLE_GRILLE_JEU; k++)
                            {
                                pointCible = new Coordonnee(k, pointDepart.Y);
                                if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                                {
                                    listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                                }
                            }
                            // Valider les coups vers le bas.
                            for (int k = pointDepart.Y; k < GrilleJeu.TAILLE_GRILLE_JEU; k++)
                            {
                                pointCible = new Coordonnee(k, pointDepart.Y);
                                if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                                {
                                    listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                                }
                            }
                        }
                        else
                        {
                            // Valider un coup vers la gauche.
                            pointCible = new Coordonnee(pointDepart.X - 1, pointDepart.Y);
                            if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                            {
                                listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                            }

                            // Valider un coup vers l'avant.
                            pointCible = new Coordonnee(pointDepart.X, pointDepart.Y - 1);
                            if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                            {
                                listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                            }

                            // Valider un coup vers la droite.
                            pointCible = new Coordonnee(pointDepart.X + 1, pointDepart.Y);
                            if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                            {
                                listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                            }

                            // Valider un coup vers l'arrière.
                            pointCible = new Coordonnee(pointDepart.X, pointDepart.Y + 1);
                            if (Jeu.GrillePartie.EstDeplacementPermis(pointDepart, pointCible))
                            {
                                listeCoups.Add(new CoupCote(pointDepart, pointCible, grillePartie, Couleur));
                            }
                        }
                    }
                }
            }

            return(listeCoups);
        }