/// <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(); }
/// <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(); } }
/// <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); }