/** * Methode utile pour la classe Pion. modifie le fetdeplacementPossible selon la presence d'une * piece adverse en diagonale par rapport a la direction d'avancee du pion * * @param caseActuelle :case du pion * @param res : le getdeplacement de la piece */ private void filtrerpresenceAdversaireDiagonale(Case caseActuelle, ArrayList<Case> casePossible) { for (int i = 0; i < casePossible.size(); i++) { Case c = casePossible.get(i); Case caseEchiquier = chercherCase(c.getPosition()); if (caseEchiquier.getPosition().getLargeur() == caseActuelle.getPosition().getLargeur() + 1 || caseEchiquier.getPosition().getLargeur() == caseActuelle.getPosition().getLargeur() - 1) { if (caseEchiquier.estVide()) { casePossible.remove(c); i--; } else if (caseEchiquier.getPiece().getCamp().equals(caseActuelle.getPiece().getCamp())) { casePossible.remove(c); i--; } } else { if (!caseEchiquier.estVide()) { casePossible.remove(c); i--; } } } }
public ArrayList<Case> filtreGeneral(Case caseDepart) { ArrayList<Case> plop = new ArrayList<Case>(); plop = caseDepart .getPiece() .getDeplacementPossible( caseDepart); // donne les déplacements possible de la piece présent sur la case // depart if (caseDepart.getPiece().getClass().getSimpleName().equals(new String("Fou"))) { filtrePourFou(caseDepart, plop); } if (caseDepart.getPiece().getClass().getSimpleName().equals(new String("Tour"))) { filtrePourTour(caseDepart, plop); } if (caseDepart.getPiece().getClass().getSimpleName().equals(new String("Reine"))) { filtrePourReine(caseDepart, plop); } plop = filtrerDeplacementPossible( caseDepart.getPiece().getCamp(), plop); // filtre si il n'y pas de pieces if (caseDepart.getPiece().getClass().getSimpleName().equals(new String("Pion"))) { filtrerpresenceAdversaireDiagonale(caseDepart, plop); } return plop; }
/** * Filtre la liste selon la presence d'une pièce du meme camp * * @param camp camp de la piece de la case de depart * @param casePossible Liste des cases possibles, a filtrer * @return Liste filtree */ private ArrayList<Case> filtrerDeplacementPossible(String camp, ArrayList<Case> casePossible) { Case caseplateau; for (int i = 0; i < (casePossible.size()); i++) { caseplateau = chercherCase(casePossible.get(i).getPosition()); if ((!caseplateau.estVide())) { if (caseplateau.getPiece().getCamp().equals(camp)) { casePossible.remove(casePossible.get(i)); i--; } } } return casePossible; }
/** * recupere la case selectionne envoye par l'interface graphique * * @param caseSelectionne * @return "rien" si il n'y a pas eu de deplacement, le deplacement en notation algebrique sinon * @throws DeplacementException */ public String selectionnerCase(Case caseSelectionne) throws DeplacementException { // System.out.println(caseSelectionne.getPosition().getHauteur()+","+caseSelectionne.getPosition().getLargeur()); /* System.out.println("---------------------------------"); System.out.println(getCaseRoiBlanc().getPosition().getHauteur()+","+getCaseRoiBlanc().getPosition().getLargeur()); System.out.println(getCaseRoiNoir().getPosition().getHauteur()+","+getCaseRoiNoir().getPosition().getLargeur()); System.out.println("---------------------------------"); */ if (this.caseSelectionne == null) { if (!caseSelectionne.estVide()) { if (caseSelectionne.getPiece().getCamp().equals(campActif)) { this.caseSelectionne = caseSelectionne; return "rien"; } else { return "rien"; } } else { return "rien"; } } else { if (this.caseSelectionne.equals(caseSelectionne)) { this.caseSelectionne = null; return "rien"; } else { String dep; dep = deplacer(this.caseSelectionne, caseSelectionne); this.caseSelectionne = null; if (!dep.equals("rien")) if (campActif.equals("blanc")) campActif = new String("noir"); else campActif = new String("blanc"); return dep; } } }
public void validerDeplacement(Position depart, Case caseDepart, Case caseSauvegardeArrivee) { if (!caseSauvegardeArrivee.estVide()) // si il y avait une piece a l'arrivee { this.listePiecePrises.add( caseSauvegardeArrivee.getPiece()); // on ajoute la piece dans la liste des pieces prises for (int j = 0; j < listePieceEnJeu.size(); j++) // pour toutes les pieces en jeu if (this.listePieceEnJeu .get(j) .getPiece() .equals( caseSauvegardeArrivee.getPiece())) // si il y a une case egale a la case d'arrivee this.listePieceEnJeu.remove(j); // on la supprime } /* if(!caseSauvegardeArrivee.estVide())//si il y a une piece a l'arrivee { this.listePiecePrises.add(caseSauvegardeArrivee.getPiece());//on ajoute la piece dans la liste des pieces prises for(int j=0; j< listePieceEnJeu.size();j++)//pour toutes les pieces en jeu if(this.listePieceEnJeu.get(j).getPiece().equals(caseSauvegardeArrivee.getPosition()))//si il y a une case egale a la case d'arrivee this.listePieceEnJeu.remove(j);//on la supprime }*/ if (caseDepart.getPiece().getClass().getSimpleName().equals("Roi")) { if (caseDepart.getPiece().getCamp().equals("noir")) { this.caseRoiNoir.setPosition(caseSauvegardeArrivee.getPosition()); } else { this.caseRoiBlanc.setPosition(caseSauvegardeArrivee.getPosition()); } } if (!caseDepart.getPiece().isDejaBouge()) caseDepart.getPiece().setDejaBouge(true); }
/** * fait un deplacement sans test d'echec * * @param caseDepart * @param caseArrivee */ public boolean deplacerReussi(Case caseDepart, Case caseArrivee) { ArrayList<Case> plop = new ArrayList<Case>(); boolean depEffectue = false; plop = filtreGeneral(caseDepart); for (int i = 0; i < plop.size(); i++) { if (plop.get(i).getPosition().equals(caseArrivee.getPosition())) { Case sauvegardeArrivee = new Case( new Position( caseArrivee.getPosition().getHauteur(), caseArrivee.getPosition().getLargeur())); Piece p = changerCase(caseDepart, caseArrivee); sauvegardeArrivee.setPiece(p); for (int j = 0; j < listePieceEnJeu.size(); j++) // pour toutes les pieces en jeu if (this.listePieceEnJeu.get(j).getPosition().equals(caseDepart.getPosition())) { this.listePieceEnJeu .get(j) .setPosition( new Position( sauvegardeArrivee.getPosition().getHauteur(), sauvegardeArrivee.getPosition().getLargeur())); // on met a jour la position } if (caseArrivee.getPiece().getClass().getSimpleName().equals("Roi")) { if (caseArrivee.getPiece().getCamp().equals("noir")) { this.caseRoiNoir.setPosition(sauvegardeArrivee.getPosition()); } else { this.caseRoiBlanc.setPosition(sauvegardeArrivee.getPosition()); } } int res = echec(); if (res == 11 && campActif.equals("noir")) { changerCase(caseArrivee, caseDepart); for (int j = 0; j < listePieceEnJeu.size(); j++) // pour toutes les pieces en jeu if (this.listePieceEnJeu .get(j) .getPosition() .equals( new Position( sauvegardeArrivee.getPosition().getHauteur(), sauvegardeArrivee.getPosition().getLargeur()))) { this.listePieceEnJeu .get(j) .setPosition(caseDepart.getPosition()); // on met a jour la position } if (caseDepart.getPiece().getClass().getSimpleName().equals("Roi")) { if (caseDepart.getPiece().getCamp().equals("noir")) { this.caseRoiNoir.setPosition(caseDepart.getPosition()); } else { this.caseRoiBlanc.setPosition(caseDepart.getPosition()); } } } else if (res == 12 && campActif.equals("blanc")) { changerCase(caseArrivee, caseDepart); for (int j = 0; j < listePieceEnJeu.size(); j++) // pour toutes les pieces en jeu if (this.listePieceEnJeu .get(j) .getPosition() .equals( new Position( sauvegardeArrivee.getPosition().getHauteur(), sauvegardeArrivee.getPosition().getLargeur()))) { this.listePieceEnJeu .get(j) .setPosition(caseDepart.getPosition()); // on met a jour la position } } else { validerDeplacement(caseDepart.getPosition(), caseArrivee, sauvegardeArrivee); depEffectue = true; } } } return depEffectue; }