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