예제 #1
0
 public void perform_1(final Context context) {
   Turtle turtle = (Turtle) context.agent;
   turtle.moveToPatchCenter();
   Patch patch = turtle.getPatchHere();
   double winningValue = Double.MAX_VALUE;
   List<Patch> winners = new ArrayList<Patch>();
   for (AgentSet.Iterator it = patch.getNeighbors4().iterator(); it.hasNext(); ) {
     Patch tester = (Patch) it.next();
     Object value = tester.getPatchVariable(reference.vn());
     if (!(value instanceof Double)) {
       continue;
     }
     double dvalue = ((Double) value).doubleValue();
     // need to be careful here to handle properly the case where
     // dvalue equals Double.MAX_VALUE - ST 10/11/04, 1/6/07
     if (dvalue <= winningValue) {
       if (dvalue < winningValue) {
         winningValue = dvalue;
         winners.clear();
       }
       winners.add(tester);
     }
   }
   if (!winners.isEmpty()
       && (!(patch.getPatchVariable(reference.vn()) instanceof Double)
           || winningValue < ((Double) patch.getPatchVariable(reference.vn())).doubleValue())) {
     Patch winner = winners.get(context.job.random.nextInt(winners.size()));
     turtle.face(winner, true);
     try {
       turtle.moveTo(winner);
     } catch (AgentException ex) {
       // should be impossible
       throw new IllegalStateException(ex);
     }
   }
   context.ip = next;
 }