Example #1
0
 private void AddFlower(Random random)
 {
     Point location = new Point(random.Next(FieldMinX, FieldMaxX),
                                random.Next(FieldMinY, FieldMaxY));
     Flower newFlower = new Flower(location, random);
     Flowers.Add(newFlower);
 }
Example #2
0
 public Bee(int ID, Point initialLocation, World world, Hive hive)
 {
     this.ID = ID;
     Age = 0;
     location = initialLocation;
     InsideHive = true;
     CurrentState = BeeState.Idle;
     destinationFlower = null;
     NectarCollected = 0;
     this.world = world;
     this.hive = hive;
 }
Example #3
0
 public void Go(Random random)
 {
     Age++;
     BeeState oldState = CurrentState;
     switch (CurrentState)
     {
         case BeeState.Idle:
             if (Age > CareerSpan)
             {
                 CurrentState = BeeState.Retired;
             }
             else if (world.Flowers.Count > 0
                 && hive.ConsumeHoney(HoneyConsumed))
             {
                 Flower flower =
                   world.Flowers[random.Next(world.Flowers.Count)];
                 if (flower.Nectar >= MinimumFlowerNectar && flower.Alive)
                 {
                     destinationFlower = flower;
                     CurrentState = BeeState.FlyingToFlower;
                 }
             }
             break;
         case BeeState.FlyingToFlower:
             if (!world.Flowers.Contains(destinationFlower))
                 CurrentState = BeeState.ReturningToHive;
             else if (InsideHive)
             {
                 if (MoveTowardsLocation(hive.GetLocation("Exit")))
                 {
                     InsideHive = false;
                     location = hive.GetLocation("Entrance");
                 }
             }
             else
                 if (MoveTowardsLocation(destinationFlower.Location))
                     CurrentState = BeeState.GatheringNectar;
             break;
         case BeeState.GatheringNectar:
             double nectar = destinationFlower.HarvestNectar();
             if (nectar > 0)
                 NectarCollected += nectar;
             else
                 CurrentState = BeeState.ReturningToHive;
             break;
         case BeeState.ReturningToHive:
             if (!InsideHive)
             {
                 if (MoveTowardsLocation(hive.GetLocation("Entrance")))
                 {
                     InsideHive = true;
                     location = hive.GetLocation("Exit");
                 }
             }
             else
                 if (MoveTowardsLocation(hive.GetLocation("HoneyFactory")))
                     CurrentState = BeeState.MakingHoney;
             break;
         case BeeState.MakingHoney:
             if (NectarCollected < 0.5)
             {
                 NectarCollected = 0;
                 CurrentState = BeeState.Idle;
             }
             else
                 if (hive.AddHoney(0.5))
                     NectarCollected -= 0.5;
                 else
                     NectarCollected = 0;
             break;
         case BeeState.Retired:
             // Do nothing! We’re retired!
             break;
     }
     if (oldState != CurrentState
         && MessageSender != null)
         MessageSender(ID, CurrentState.ToString());
 }