Jouable
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user