/** * @param attacks - a set of MoveAttack * @return the list of my neighbor that haven't attack me, since I can't attack someone who * already attack me * @throws BadAcquaintancesException */ private MoveAttackReturn manageIncomingMoveAttack(Set<EcoAttack> attacks) throws BadAcquaintancesException { if (attacks.size() > 1) { // si j'ai plus d'un voisin qui m'attaque j'en choisi au hasard System.err.println("I'm attack by various move attack, choose randomly"); // $NON-NLS-1$ } EcoAttack attack = attacks.iterator().next(); EcoIdentity target = attack.getAssailant(); EcoIdentity[] neighboors = getNeighboors(); EcoIdentity me = this.getEcoIdentity(); EcoRelation defenderUp; EcoRelation defenderDown; EcoRelation defenderRight; EcoRelation defenderLeft; EcoRelation defenderHosted; if (target.equals(neighboors[0])) { // move to up defenderUp = new Down(me, target); defenderDown = new Up(target, me); defenderRight = new Left(target, neighboors[1]); defenderLeft = new Right(target, neighboors[3]); } else if (target.equals(neighboors[1])) { // move to right defenderUp = new Down(target, neighboors[0]); defenderDown = new Up(target, neighboors[2]); defenderRight = new Left(me, target); defenderLeft = new Right(target, neighboors[3]); } else if (target.equals(neighboors[2])) { // move to down defenderUp = new Down(me, target); defenderDown = new Up(target, neighboors[2]); defenderRight = new Left(target, neighboors[1]); defenderLeft = new Right(target, neighboors[3]); } else if (target.equals(neighboors[3])) { // move to left defenderUp = new Down(target, neighboors[0]); defenderDown = new Up(target, neighboors[2]); defenderRight = new Left(me, target); defenderLeft = new Right(target, neighboors[3]); } else { throw new BadAcquaintancesException(); } defenderHosted = new Hosted(target, getPlace()); Collection<EcoRelation> newTargetAcquaintances = new LinkedList<EcoRelation>(); newTargetAcquaintances.add(defenderUp); newTargetAcquaintances.add(defenderDown); newTargetAcquaintances.add(defenderRight); newTargetAcquaintances.add(defenderLeft); newTargetAcquaintances.add(defenderHosted); MoveAttackReturn ack = new MoveAttackReturn(me, target, newTargetAcquaintances); this.setAcquaintances(attack.getConstraints()); return ack; }