/// <summary> /// Crée les affichages des pièces /// </summary> private void InitialiserAffichagePieces() { Coordonnee position; Rectangle imageAffichage; GrillePieces = new List <List <Rectangle> >(); for (int i = 0; i < GrilleJeu.TAILLE_GRILLE_JEU; i++) { GrillePieces.Add(new List <Rectangle>()); for (int j = 0; j < GrilleJeu.TAILLE_GRILLE_JEU; j++) { position = new Coordonnee(i, j); if (GrillePartie.EstCaseOccupee(position)) { imageAffichage = CreerAffichagePiece(GrillePartie.ObtenirPiece(position)); Grid.SetColumn(imageAffichage, i); Grid.SetRow(imageAffichage, j); grdPartie.Children.Add(imageAffichage); GrillePieces[i].Add(imageAffichage); } else { GrillePieces[i].Add(null); } } } }
/// <summary> /// S'exécute lorsque l'on clique sur une case. /// </summary> /// <param name="sender">Objet appelant</param> /// <param name="e">Arguments</param> private void ResoudreSelectionCase(object sender, MouseButtonEventArgs e) { Rectangle caseSelectionnee = (Rectangle)sender; Coordonnee pointSelectionne = new Coordonnee(Grid.GetColumn(caseSelectionnee), Grid.GetRow(caseSelectionnee)); Coordonnee pointActif; ReponseDeplacement reponse; // Tour du joueur if (TourJeu == CouleurJoueurs.CouleurJoueur) { if (grdPartie.Children.Contains(SelectionActive)) { pointActif = new Coordonnee(Grid.GetColumn(SelectionActive), Grid.GetRow(SelectionActive)); if (pointSelectionne == pointActif) { grdPartie.Children.Remove(SelectionActive); } else { reponse = ExecuterCoup(pointActif, pointSelectionne); if (reponse.DeplacementFait) { grdPartie.Children.Remove(SelectionActive); } } } else { if (GrillePartie.EstCaseOccupee(pointSelectionne) && GrillePartie.ObtenirCouleurPiece(pointSelectionne) == CouleurJoueurs.CouleurJoueur) { Grid.SetColumn(SelectionActive, pointSelectionne.X); Grid.SetRow(SelectionActive, pointSelectionne.Y); grdPartie.Children.Add(SelectionActive); } } } }
/// <summary> /// Détermine si le joueur peut jouer (s'il a des coups disponibles) /// </summary> /// <returns>Si le joueur peut jouer</returns> private bool JoueurACoupsPermis() { 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 (GrillePartie.EstCaseOccupee(pointDepart) && GrillePartie.ObtenirCouleurPiece(pointDepart) == CouleurJoueurs.CouleurJoueur) { if (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 (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } } // Valider les coups vers le haut. for (int k = pointDepart.Y; k >= 0; k--) { pointCible = new Coordonnee(pointDepart.X, k); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } } // Valider les coups vers la droite. for (int k = pointDepart.X; k < GrilleJeu.TAILLE_GRILLE_JEU; k++) { pointCible = new Coordonnee(k, pointDepart.Y); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } } // Valider les coups vers le bas. for (int k = pointDepart.Y; k < GrilleJeu.TAILLE_GRILLE_JEU; k++) { pointCible = new Coordonnee(k, pointDepart.Y); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } } } else { // Valider un coup vers la gauche. pointCible = new Coordonnee(pointDepart.X - 1, pointDepart.Y); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } // Valider un coup vers l'avant. pointCible = new Coordonnee(pointDepart.X, pointDepart.Y - 1); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } // Valider un coup vers la droite. pointCible = new Coordonnee(pointDepart.X + 1, pointDepart.Y); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } // Valider un coup vers l'arrière. pointCible = new Coordonnee(pointDepart.X, pointDepart.Y + 1); if (GrillePartie.EstDeplacementPermis(pointDepart, pointCible)) { listeCoups.Add(new CoupCote(pointDepart, pointCible, GrillePartie, CouleurJoueurs.CouleurJoueur)); } } } } } return(listeCoups.Count > 0); }