2025-08-12 22:18:58 +02:00
|
|
|
package modele.piece;
|
2025-09-13 23:27:56 +02:00
|
|
|
import java.awt.Point;
|
|
|
|
|
import modele.Case;
|
2025-08-12 22:18:58 +02:00
|
|
|
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) {
|
2025-09-13 23:27:56 +02:00
|
|
|
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();
|
2025-08-12 22:18:58 +02:00
|
|
|
}
|
|
|
|
|
}
|