Files
CHESS/src/modele/piece/Reine.java
T
HP_pellel 802c85adfb Jouable
2025-09-13 23:27:56 +02:00

68 lines
2.4 KiB
Java

package modele.piece;
import java.awt.Point;
import modele.Case;
import modele.Couleur;
import modele.Coup;
import modele.Plateau;
public class Reine extends Piece{
public Reine(Couleur couleur) {
super(couleur);
if(couleur == Couleur.BLANC) {
this.symbole = "BR"; // Symbole pour la reine blanche
} else {
this.symbole = "NR"; // Symbole pour la reine noire
}
}
@Override
public boolean estDeplacementValide(Coup coup, Plateau plateau) {
Point origine = coup.getOrigine();
Point destination = coup.getDestination();
// Conventions : Point.x = ligne, Point.y = colonne
int ligneOrigine = origine.x;
int colOrigine = origine.y;
int ligneDest = destination.x;
int colDest = destination.y;
// bornes de plateau
if (ligneDest < 0 || ligneDest > 7 || colDest < 0 || colDest > 7) return false;
int deltaLigne = Math.abs(ligneDest - ligneOrigine);
int deltaCol = Math.abs(colDest - colOrigine);
//Vérifie que le déplacement est bien en diagonale ou en ligne droite
if (!(deltaLigne == 0 || deltaCol == 0 || deltaLigne == deltaCol)) return false; //
// Verification si le chemin est libre pour ne pas que la reine saute par dessus une piece
// Direction du mouvement et le pas
int pasLigne = 0;
if (ligneDest > ligneOrigine) pasLigne = 1;
else if (ligneDest < ligneOrigine) pasLigne = -1;
int pasCol = 0;
if (colDest > colOrigine) pasCol = 1;
else if (colDest < colOrigine) pasCol = -1;
// Vérification des cases intermédiaires
int nbPas = Math.max(deltaLigne, deltaCol);
for (int i = 1; i < nbPas; i++) {
int l = ligneOrigine + i * pasLigne;
int c = colOrigine + i * pasCol;
Case caseInter = plateau.getCase(l, c);
if (!caseInter.estVide()) {
System.out.println("Le chemin est bloqué par une pièce en (" + l + ", " + c + ")");
return false;
}
}
// Etat de la case de destination
Case caseDest = plateau.getCase(ligneDest, colDest);
if (caseDest.estVide()) return true;
// si la case est occupée
return caseDest.getPiece().getCouleur() != this.getCouleur();
}
}