示例#1
0
  /**
   * Look for foxes and wolfs adjacent to the current location. Only the first live foxes or wolf 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 Wolf) {
        Wolf wolf = (Wolf) animal;
        if (wolf.isAlive()) {
          wolf.setDead();
          setFoodLevel(WOLFS_FOOD_VALUE);
          return where;
        }
      } else if (animal instanceof Fox) {
        Fox fox = (Fox) animal;
        if (fox.isAlive()) {
          fox.setDead();
          setFoodLevel(FOX_FOOD_VALUE);
          return where;
        }

      } else if (animal instanceof Rabbit) {
        Rabbit rabbit = (Rabbit) animal;
        if (rabbit.isAlive()) {
          rabbit.setDead();
          setFoodLevel(RABBIT_FOOD_VALUE);
          return where;
        }
      }
    }
    return null;
  }
 /**
  * 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;
 }
示例#3
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);
  }