diff --git a/src/piecesEchiquier/Cavalier.java b/src/piecesEchiquier/Cavalier.java index 182f440..d43e670 100755 --- a/src/piecesEchiquier/Cavalier.java +++ b/src/piecesEchiquier/Cavalier.java @@ -6,4 +6,73 @@ public class Cavalier extends Piece { { super(c,l,pos); } + + public boolean deplacable(Echiquier e, Piece p) // vérifie que le Cavalier peut être déplacé + { + //Côté droit + if((p.getPosition().getX()) == (this.getPosition().getX()+1) && (p.getPosition().getY()) == (this.getPosition().getY()+2)) //Verifie deplacement y+2 vers le haut et x+1 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()+2) && (p.getPosition().getY()) == (this.getPosition().getY()+1)) //Verifie deplacement y+1 vers le haut et x+2 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()+1) && (p.getPosition().getY()) == (this.getPosition().getY()-2)) //Verifie deplacement y-2 vers le bas et x+1 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()+2) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y-1 vers le bas et x+2 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + //Côté gauche + if((p.getPosition().getX()) == (this.getPosition().getX()-1) && (p.getPosition().getY()) == (this.getPosition().getY()+2)) //Verifie deplacement y+2 vers le haut et x-1 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()-2) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y-1 vers le bas et x-2 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()-1) && (p.getPosition().getY()) == (this.getPosition().getY()-2)) //Verifie deplacement y-2 vers le bas et x-1 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()-2) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y+1 vers le haut et x-2 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + return false; + } } diff --git a/src/piecesEchiquier/Echiquier.java b/src/piecesEchiquier/Echiquier.java index a59fc34..b312417 100755 --- a/src/piecesEchiquier/Echiquier.java +++ b/src/piecesEchiquier/Echiquier.java @@ -49,11 +49,11 @@ public class Echiquier { private Fou FouN1 = new Fou("Noir","FN",new Position(3,8)); private Fou FouN2 = new Fou("Noir","FN",new Position(6,8)); - private Reine ReineB1 = new Reine("Blanc","RB",new Position(4,1)); - private Reine ReineN1 = new Reine("Noir","RN",new Position(4,8)); + private Reine ReineB1 = new Reine("Blanc","RB",new Position(5,1)); + private Reine ReineN1 = new Reine("Noir","RN",new Position(5,8)); - private Roi RoiB1 = new Roi("Blanc","KB",new Position(5,1)); - private Roi RoiN1 = new Roi("Noir","KN",new Position(5,8)); + private Roi RoiB1 = new Roi("Blanc","KB",new Position(4,1)); + private Roi RoiN1 = new Roi("Noir","KN",new Position(4,8)); private Piece[][] echiquier = @@ -83,6 +83,8 @@ public class Echiquier { public String[][] getCodes() { return codes; } + + @@ -109,16 +111,12 @@ public class Echiquier { return echec; } - public boolean VerifFinale(Joueur J, String A, String B) // FONCTION TRADUCTION, VERIF + DEPLACEMENTS SI POSSIBLE + public boolean verificationMouvement(Joueur J, String A, String B) // FONCTION TRADUCTION, VERIF + DEPLACEMENTS SI POSSIBLE { int i = -1; int j = -1; int k; int l; - //int stockX; - //int stockY; - //int stockX2; - //int stockY2; Position stock; Position stock2; @@ -131,7 +129,7 @@ public class Echiquier { j++; if (getCodes()[i][j].equals(A)) //Cherche dans la matrice code si on trouve une string = celle donnée par le joueur { - if (this.getEchiquier()[i][j].getClass().getName().equals("Piece")) // Verifie si la case choisie n'est pas vide + if (this.getEchiquier()[i][j].getNom().equals("..")) // Verifie si la case choisie n'est pas vide { System.out.println("Vous avez choisi une case vide. Recommencez."); return false; @@ -145,9 +143,6 @@ public class Echiquier { }while(( (getCodes()[i][j].equals(A)) == false) && (j+1 < codes.length)); }while((getCodes()[i][j].equals(A) == false) && (i+1 < codes.length)); - - - for (k = 0; k < codes.length;k++) /// TEST 2EME COORS { @@ -165,7 +160,7 @@ public class Echiquier { else if (this.getEchiquier()[i][j].deplacable(this,this.getEchiquier()[k][l]) == false) // VERIFICATION AVEC FONCTION DEPLACABLE { - System.out.println("Déplacement impossible. Recommencez."); + System.out.println("Déplacement impossible. Recommencez. \n"); return false; } @@ -173,7 +168,7 @@ public class Echiquier { else { - System.out.println("Choix validés. déplacement en cours."); + System.out.println("Choix validés. déplacement en cours."); // Partie déplacement stock = new Position(l+1,8-k); stock2 = new Position(j+1,8-i); this.getEchiquier()[k][l] = this.getEchiquier()[i][j]; @@ -187,15 +182,84 @@ public class Echiquier { } System.out.println("Un de vos codes est faux. Recommencez."); // SI COORS INEXISTANTE (EX : A) return false; - } + } + + public boolean verificationMouvementSilencieuse(Joueur J, String A, String B) // FONCTION TRADUCTION, VERIF + DEPLACEMENTS SI POSSIBLE + { + int i = -1; + int j = -1; + int k; + int l; + Position stock; + Position stock2; + + do { /// TEST 1ERE COORS + i++; + j = -1; + + + do { + j++; + if (getCodes()[i][j].equals(A)) //Cherche dans la matrice code si on trouve une string = celle donnée par le joueur + { + if (this.getEchiquier()[i][j].getNom().equals("..")) // Verifie si la case choisie n'est pas vide + { + return false; + } + else if (this.getEchiquier()[i][j].getCouleur() != J.getCouleur()) // Verifie si la piece choisie n'est pas de la faction opposée + { + return false; + } + } + }while(( (getCodes()[i][j].equals(A)) == false) && (j+1 < codes.length)); + }while((getCodes()[i][j].equals(A) == false) && (i+1 < codes.length)); + + + for (k = 0; k < codes.length;k++) /// TEST 2EME COORS + { + for (l = 0; l < codes.length;l++) + { + if (getCodes()[k][l].equals(B) == true) + { + if (this.getEchiquier()[k][l].getCouleur() == J.getCouleur()) // Verifie que la piece visée n'est pas de ta faction + { + return false; + + } + + + else if (this.getEchiquier()[i][j].deplacable(this,this.getEchiquier()[k][l]) == false) // VERIFICATION AVEC FONCTION DEPLACABLE + { + return false; + + } + + + else + { // Partie déplacement + stock = new Position(l+1,8-k); + stock2 = new Position(j+1,8-i); + this.getEchiquier()[k][l] = this.getEchiquier()[i][j]; + this.getEchiquier()[k][l].setPosition(stock); + this.getEchiquier()[i][j] = new Piece(stock2); + return true; + } + + } + } + } + System.out.println("Un de vos codes est faux. Recommencez."); // SI COORS INEXISTANTE (EX : A) + return false; + } public boolean estVide(Position position) { int x = position.getX(); int y = position.getY(); - if(this.echiquier[x][y].getNom()=="..") { - return true; - } + if(this.echiquier[8-y][x-1].getNom()=="..") + { + return true; + } return false; } diff --git a/src/piecesEchiquier/Fou.java b/src/piecesEchiquier/Fou.java index 3beef25..f3c7ccf 100755 --- a/src/piecesEchiquier/Fou.java +++ b/src/piecesEchiquier/Fou.java @@ -9,11 +9,6 @@ public class Fou extends Piece { public boolean deplacable(Echiquier e,Piece p) { - System.out.println("test"); - System.out.println(p.getPosition().getX()); - System.out.println(p.getPosition().getY()); - System.out.println(this.getPosition().getX()); - System.out.println(this.getPosition().getY()); for (int i = 1; i < 8; i++) // ON CHERCHE SI LA 2EME COORS EST EN DIAGONALE DE LA 1 ERE { @@ -51,7 +46,7 @@ public class Fou extends Piece { } - + else if ( p.getPosition().getX() == this.getPosition().getX()-i) // 2eme coors a gauche de la 1 ere { diff --git a/src/piecesEchiquier/Piece.java b/src/piecesEchiquier/Piece.java index c6bd898..3831050 100755 --- a/src/piecesEchiquier/Piece.java +++ b/src/piecesEchiquier/Piece.java @@ -3,7 +3,7 @@ package piecesEchiquier; public class Piece { - private String couleur; + private String couleur = ""; //private String lettre = ".."; private String nom = ".."; private boolean enVie = true; diff --git a/src/piecesEchiquier/Pion.java b/src/piecesEchiquier/Pion.java index 96b5ebb..d89463f 100755 --- a/src/piecesEchiquier/Pion.java +++ b/src/piecesEchiquier/Pion.java @@ -10,7 +10,7 @@ public class Pion extends Piece { } - public boolean deplacable(Piece p) // CHECK QUE PION PEUT ETRE DEPLACE + public boolean deplacable(Echiquier e, Piece p) // CHECK QUE PION PEUT ETRE DEPLACE { if (p.getPosition().getX()-1 == this.getPosition().getX() || p.getPosition().getX()+1 == this.getPosition().getX()) //vERIFICATION SI LA PERSONNE SOUHAITE MANGER LA PIECE { @@ -31,13 +31,18 @@ public class Pion extends Piece { // Avancer tout droit else if (p.getPosition().getX() == this.getPosition().getX()) { - - if ((this.getCouleur().equals("Blanc")) && (p.getPosition().getY()-1 == this.getPosition().getY()) || (this.getCouleur().equals("Noir")) && (p.getPosition().getY()+1 == this.getPosition().getY())) + if (!(p.getNom().equals(".."))) // SI case non vide + { + System.out.println("Vous ne pouvez pas manger en avancant tout droit."); + return false; + } + if ( ((this.getCouleur().equals("Blanc")) && (p.getPosition().getY()-1 == this.getPosition().getY()) ) || ((this.getCouleur().equals("Noir")) && (p.getPosition().getY()+1 == this.getPosition().getY()))) { return true; } - if (this.aBouge() == false && ((this.getCouleur().equals("Blanc") && p.getPosition().getY()-2 == this.getPosition().getY()) || (this.getCouleur().equals("Noir") && p.getPosition().getY()+2 == this.getPosition().getY()))) + if ( (this.aBouge() == false && (this.getCouleur().equals("Blanc") && p.getPosition().getY()-2 == this.getPosition().getY()) ) + || (this.getCouleur().equals("Noir") && p.getPosition().getY()+2 == this.getPosition().getY()) ) { return true; } @@ -51,7 +56,7 @@ public class Pion extends Piece { { verif=true; } - else if(this.getIni() == this.getPosition() && this.verif == false) + else if(this.getIni() == this.getPosition()) { verif=false; } diff --git a/src/piecesEchiquier/Roi.java b/src/piecesEchiquier/Roi.java index b094581..fd5a934 100755 --- a/src/piecesEchiquier/Roi.java +++ b/src/piecesEchiquier/Roi.java @@ -1,5 +1,7 @@ package piecesEchiquier; +import joueurs.Joueur; + public class Roi extends Piece { private boolean verif=false; @@ -31,4 +33,145 @@ public class Roi extends Piece { } return verif; } + + public boolean deplacable(Echiquier e, Piece p) // vérifie que le roi peut être déplacé + { + //Côté droit + if((p.getPosition().getX()) == (this.getPosition().getX()+1) && (p.getPosition().getY()) == (this.getPosition().getY()+1)) //Verifie deplacement y+1 vers le haut et x+1 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()+1) && (p.getPosition().getY()) == (this.getPosition().getY())) //Verifie deplacement x+1 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()+1) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y-1 vers le bas et x+1 vers la droite + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + //Coté haut + if((p.getPosition().getX()) == (this.getPosition().getX()) && (p.getPosition().getY()) == (this.getPosition().getY()+1)) //Verifie deplacement y+1 vers le haut + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + //Côté bas + if((p.getPosition().getX()) == (this.getPosition().getX()) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y-1 vers le bas + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + //Côté gauche + if((p.getPosition().getX()) == (this.getPosition().getX()-1) && (p.getPosition().getY()) == (this.getPosition().getY()+1)) //Verifie deplacement y+1 vers le haut et x-1 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()-1) && (p.getPosition().getY()) == (this.getPosition().getY())) //Verifie deplacement x-1 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + + if((p.getPosition().getX()) == (this.getPosition().getX()-1) && (p.getPosition().getY()) == (this.getPosition().getY()-1)) //Verifie deplacement y-1 vers le bas et x-1 vers la gauche + { + if(p.getCouleur()!=this.getCouleur()) + { + return true; + } + } + return false; + } + + public boolean enEchec(Echiquier e, Joueur Jopp) + { + for (int i = 0; i < e.getEchiquier().length;i++) + { + for (int j = 0; j < e.getEchiquier().length;j++) + { + if ( !(e.getEchiquier()[i][j].getCouleur() == this.getCouleur() ) && (e.verificationMouvementSilencieuse(Jopp,e.getCodes()[i][j],e.getCodes()[8-this.getPosition().getY()][this.getPosition().getX()-1]) == true) ) + { + return true; + } + } + } + return false; + } + + public boolean enEchecEtMat(Echiquier e, Joueur Jopp) + { + if (this.getPosition().getY() <= 7 && e.getEchiquier()[8-(this.getPosition().getY()+1)][this.getPosition().getX()-1].getNom().equals("..")) // verification mouvement vers le haut libre + { + e.getEchiquier()[8-(this.getPosition().getY()+1)][this.getPosition().getX()-1] = this; // on fait un fantome roi + e.getEchiquier()[8-(this.getPosition().getY()+1)][this.getPosition().getX()-1].getPosition().setY(this.getPosition().getY()+1); // on corrige sa position + if (!(this.enEchec(e,Jopp) )) // si pas en echec possibilité de mouvement donc pas echec et mat + { + e.getEchiquier()[8-(this.getPosition().getY()+1)][this.getPosition().getX()-1] = new Piece(new Position(this.getPosition().getX(),this.getPosition().getY()+1)); + // on tue le fantome de test + return false; + } + + } + + if (e.getEchiquier()[8-(this.getPosition().getY()-1)][this.getPosition().getX()-1].getNom().equals("..")) // verification mouvement vers le bas libre + { + e.getEchiquier()[8-(this.getPosition().getY()-1)][this.getPosition().getX()-1] = this; // on fait un fantome roi + e.getEchiquier()[8-(this.getPosition().getY()-1)][this.getPosition().getX()-1].getPosition().setY(this.getPosition().getY()-1); // on corrige sa position + if (!(this.enEchec(e,Jopp) )) // si pas en echec possibilité de mouvement donc pas echec et mat + { + e.getEchiquier()[8-(this.getPosition().getY()-1)][this.getPosition().getX()-1] = new Piece(new Position(this.getPosition().getX(),this.getPosition().getY()-1)); + // on tue le fantome de test + return false; + } + + } + + if (e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)-1].getNom().equals("..")) // verification mouvement vers la gauche libre + { + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)-1] = this; // on fait un fantome roi + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)-1].getPosition().setX(this.getPosition().getX()-1); // on corrige sa position + if (!(this.enEchec(e,Jopp) )) // si pas en echec possibilité de mouvement donc pas echec et mat + { + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)-1] = new Piece(new Position(this.getPosition().getX()-1,this.getPosition().getY()) ); + // on tue le fantome de test + return false; + } + + } + + if (e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)+1].getNom().equals("..")) // verification mouvement vers la droite libre + { + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)+1] = this; // on fait un fantome roi + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)+1].getPosition().setX(this.getPosition().getX()+1); // on corrige sa position + if (!(this.enEchec(e,Jopp) )) // si pas en echec possibilité de mouvement donc pas echec et mat + { + e.getEchiquier()[8-this.getPosition().getY()][(this.getPosition().getX()-1)+1] = new Piece(new Position(this.getPosition().getX()+1,this.getPosition().getY()) ); + // on tue le fantome de test + return false; + } + + } + return true; + } } + diff --git a/src/piecesEchiquier/Tour.java b/src/piecesEchiquier/Tour.java index c2524c6..30cb6a5 100755 --- a/src/piecesEchiquier/Tour.java +++ b/src/piecesEchiquier/Tour.java @@ -11,10 +11,8 @@ public class Tour extends Piece { { if(p.getPosition().getX() == this.getPosition().getX()) // verification les 2 pieces sont sur la meme colonne { - System.out.println("test"); if (p.getPosition().getY() > this.getPosition().getY()) // Test si la 2 eme piece est au dessus de la 1ere { - System.out.println("test2"); for (int i = this.getPosition().getY()+1; i <= p.getPosition().getY()-1;i++) // verifie qu'il n'y a pas d'obstacles sur le chemin { if (!(e.getEchiquier()[8-i][this.getPosition().getX()-1].getNom().equals(".."))) // SI case non vide diff --git a/src/visuel/main.java b/src/visuel/main.java index f58c9d6..e762825 100755 --- a/src/visuel/main.java +++ b/src/visuel/main.java @@ -47,23 +47,35 @@ public class main { System.out.println("A quel endroit la poser ? Donnez le code correspondant a l'endroit ou poser la piece.\n"); B = sc.nextLine(); - }while (e.VerifFinale(j1, A,B) != true); // Tant que le mouvement n'est pas faisable on demande 2 coordonnées - + }while (e.verificationMouvement(j1, A,B) != true); // Tant que le mouvement n'est pas faisable on demande 2 coordonnées + if (e.getRoiN1().enEchec(e,j2) && e.getRoiN1().enEchecEtMat(e,j2)) + { + System.out.println("Le joueur 2 est echec et mat, il a perdu !"); + jeu = false; + } //REAFFICHAGE ECHIQUIER System.out.println(e.toString()); // JOUEUR2 System.out.println("Tour de "+j2.getNom()+"\n"); - do { - System.out.println("Quelle piece voulez vous deplacer ? Donnez le code correspondant de la piece a  deplacer(ex : A1).\n"); - A = sc.nextLine(); - - System.out.println("A quel endroit la poser ? Donnez le code correspondant de l'endroit la poser la piece.\n"); - B = sc.nextLine(); - - }while (e.VerifFinale(j2, A,B) != true); // Tant que le mouvement n'est pas faisable on demande 2 coordonnées - + if (jeu == true) + { + do { + System.out.println("Quelle piece voulez vous deplacer ? Donnez le code correspondant de la piece a  deplacer(ex : A1).\n"); + A = sc.nextLine(); + + System.out.println("A quel endroit la poser ? Donnez le code correspondant de l'endroit la poser la piece.\n"); + B = sc.nextLine(); + + }while (e.verificationMouvement(j2, A,B) != true); // Tant que le mouvement n'est pas faisable on demande 2 coordonnées + } + + if (e.getRoiB1().enEchec(e,j1) && e.getRoiN1().enEchecEtMat(e,j1)) + { + System.out.println("Le joueur 1 est echec et mat, il a perdu !"); + jeu = false; + } //jeu = false; }while (jeu == true);