Exemplo n.º 1
0
 /**
  * Look for rabbits adjacent to the current location. Only the first live rabbit is eaten.
  *
  * @return Where food was found, or null if it wasn't.
  */
 private Location findFood() {
   Field field = getField();
   List<Location> adjacent = field.adjacentLocations(getLocation());
   Iterator<Location> it = adjacent.iterator();
   while (it.hasNext()) {
     Location where = it.next();
     Object animal = field.getObjectAt(where);
     if (animal instanceof Rabbit) {
       Rabbit rabbit = (Rabbit) animal;
       if (rabbit.isAlive()) {
         rabbit.setDead();
         foodLevel = RABBIT_FOOD_VALUE;
         // Remove the dead rabbit from the field.
         return where;
       }
     }
     if (animal instanceof Fox) {
       Fox fox = (Fox) animal;
       if (fox.isAlive()) {
         fox.setDead();
         foodLevel = WOLVES_FOOD_VALUE;
         // Remove the dead rabbit from the field.
         return where;
       }
     }
   }
   return null;
 }
Exemplo n.º 2
0
  /**
   * Run the simulation from its current state for a single step. Iterate over the whole field
   * updating the state of each fox and rabbit.
   */
  public void simulateOneStep() {
    step++;

    // Provide space for newborn rabbits.
    List<Rabbit> newRabbits = new ArrayList<Rabbit>();
    // Let all rabbits act.
    for (Iterator<Rabbit> it = rabbits.iterator(); it.hasNext(); ) {
      Rabbit rabbit = it.next();
      rabbit.run(newRabbits);
      if (!rabbit.isAlive()) {
        it.remove();
      }
    }

    // Provide space for newborn foxes.
    List<Fox> newFoxes = new ArrayList<Fox>();
    // Let all foxes act.
    for (Iterator<Fox> it = foxes.iterator(); it.hasNext(); ) {
      Fox fox = it.next();
      fox.hunt(newFoxes);
      if (!fox.isAlive()) {
        it.remove();
      }
    }

    // Add the newly born foxes and rabbits to the main lists.
    rabbits.addAll(newRabbits);
    foxes.addAll(newFoxes);

    view.showStatus(step, field);
  }