Beispiel #1
0
 /// <summary>
 /// Détermine si la case est voisine d'une case cible
 /// </summary>
 /// <param name="caseCible">La case cible</param>
 /// <returns>Si la case cible est voisine</returns>
 public bool EstVoisineDe(CaseJeu caseCible)
 {
     return(caseCible != null &&
            (VoisinGauche == caseCible || VoisinAvant == caseCible ||
             VoisinDroite == caseCible || VoisinArriere == caseCible)
            );
 }
Beispiel #2
0
        /// <summary>
        /// Détermine si case cible est accessible pour l'occupant (plus que les voisins, pour l'éclaireur)
        /// </summary>
        /// <param name="caseCible">La case cible</param>
        /// <param name="direction">La direction à tester</param>
        /// <returns>Si la case cible est accessible</returns>
        public bool EstAccessible(CaseJeu caseCible, Direction direction)
        {
            CaseJeu caseCourante = this;

            while (caseCourante != caseCible &&
                   (caseCourante != null && (!caseCourante.EstOccupe() || caseCourante == this)))
            {
                switch (direction)
                {
                case Direction.Avant:
                    caseCourante = caseCourante.VoisinAvant;
                    break;

                case Direction.Gauche:
                    caseCourante = caseCourante.VoisinGauche;
                    break;

                case Direction.Arriere:
                    caseCourante = caseCourante.VoisinArriere;
                    break;

                case Direction.Droite:
                    caseCourante = caseCourante.VoisinDroite;
                    break;
                }
            }

            return(caseCourante == caseCible);
        }
Beispiel #3
0
        /// <summary>
        /// Détermine si un déplacement est légal (teste selon le type de pièce)
        /// </summary>
        /// <param name="caseCible">La case cible</param>
        /// <returns>Si le déplacement est légal</returns>
        public bool EstDeplacementLegal(CaseJeu caseCible)
        {
            bool resultat = false;

            // Tester voisinage.             Cas spécial: l'éclaireur peut se déplacer de plusieurs cases.
            if (EstVoisineDe(caseCible) || (Occupant is Eclaireur &&
                                            (EstAccessible(caseCible, Direction.Avant) ||
                                             EstAccessible(caseCible, Direction.Gauche) ||
                                             EstAccessible(caseCible, Direction.Arriere) ||
                                             EstAccessible(caseCible, Direction.Droite)))
                )
            {
                if (Occupant is PieceMobile &&
                    (!caseCible.EstOccupe() ||
                     Occupant.Couleur != caseCible.Occupant.Couleur)) // On ne peut pas attaquer une pièce de la même couleur que soi
                {
                    resultat = true;
                }
            }

            return(resultat);
        }