This commit is contained in:
HP_pellel
2025-09-13 23:27:56 +02:00
parent e42364b2e2
commit 802c85adfb
29 changed files with 409 additions and 222 deletions
+47 -2
View File
@@ -1,4 +1,6 @@
package modele.piece;
import java.awt.Point;
import modele.Case;
import modele.Couleur;
import modele.Coup;
import modele.Plateau;
@@ -16,7 +18,50 @@ public class Reine extends Piece{
@Override
public boolean estDeplacementValide(Coup coup, Plateau plateau) {
// Implémentation de la validation du déplacement pour la reine
return false;
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();
}
}