/** * @param name * @return renvoit le pion et le retir de la liste des pions si il y en a encore un, renvoit null * sinon, et ne touche pas à la liste des pions. */ protected Pion getPion(ArrayList<Pion> listPion, String name) { for (Pion i : listPion) { if (i.getName().equals(name)) { listPion.remove(i); return i; } } return null; }
/** * @param oldX, oldY, x, y, joueur * @return renvoit true si le pion de la case (oldX,oldY) peut être déplacer sur la case (x,y) * Attention: Si la case sur laquelle on souhaite déplacer son pion est occupée par un pion * adverse, cette methode renvoit true. */ public boolean canMoveOnNewCase(int oldX, int oldY, int x, int y, boolean joueur) { Pion attaquant = map.getPion(oldX, oldY); if (attaquant == null) // verification "inutile", mais on est jamais trop prudent. { return false; } // Si on tente de déplacer un pion qui ne nous appartient pas. else if (attaquant.getTeam() != joueur) { return false; } else { byte nbrPas = attaquant.getNbrDePas(); // Soit un déplacement verticale (donc les x) if (logicalXOR( ((0 < oldX - x && oldX - x <= nbrPas) || (0 < x - oldX && x - oldX <= nbrPas)), // Soit un déplacement horizontale (donc les y) ((0 < oldY - y && oldY - y <= nbrPas) || (0 < y - oldY && y - oldY <= nbrPas)))) { if (oldX != x && oldY != y) { return false; } // Verifie s'il il n'y as pas de pion sur le trajet, lorsque la distance parcourue est // différente de 1. if (nbrPas != 1 && checkObstacleOnWay(oldX, oldY, x, y, nbrPas)) { return false; } Pion defenseur = map.getPion(x, y); if (defenseur == null) { return true; } // si blackout if (defenseur.getName().equals("blackout")) { return false; } // deplacer un pion sur un pion adverse. else if (defenseur.getTeam() != attaquant.getTeam()) { return true; } // tenter de deplacer un pion sur un autre pion qui nous appartient, ou sur une case // interdite. else { return false; } } else return false; } }