public void Go(Random random, MessageToTheForm messageToTheForm) { Bee bee; for (int i = bees.Count - 1; i >= 0; i--) { bee = bees[i]; bee.Go(random, messageToTheForm); if (bee.CurrentState == BeeState.Retired) { bees.Remove(bee); } } Flower flower; for (int i = flowers.Count - 1; i >= 0; i--) { flower = flowers[i]; flower.Go(); totalNectarHarvested += flower.NectarHarvested; if (!flower.Alive) { flowers.Remove(flower); } } // hero.Go(); //будем анимировать в других кадрах, которые формируются в главном классе verwolf.Go(); }
public void Go(Random random, MessageToTheForm message) { if (World.bees.Count <= MaximumBees && Honey > MinimumHoneyForCreatingBees && random.Next(10) == 1) //пчела рождается в 1 из 10 случаев { AddBee(random); } }
private void RunFrame(object sender, EventArgs e) { TimeSpan frameDuration = new TimeSpan(); framesRun++; //пошел отсчет кадров //передаем ссылку на метод формы (нужно довести его до пчелы) MessageToTheForm messageToTheForm = new MessageToTheForm(SendMessage); Iworld1.Go(random, messageToTheForm); //renderer.Render(); //начинаем рисовать пчел end = DateTime.Now; frameDuration = end - start; start = end; //GDI+ берем открытую форму и перерисовываем ее fieldForm.Invalidate(); }
public void Go(Random random, MessageToTheForm messageToTheForm) { 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 >= MinimumFlowerNectare) { //пчела не полетит, если нектара <1.5 destinationFlower = flower; //1-определили, к какому цветку полетим CurrentState = BeeState.FlyingToFlower; } } ; break; case BeeState.FlyingToFlower: if (!world.flowers.Contains(destinationFlower)) { CurrentState = BeeState.ReturningToHive; } else if (InsideHive) { if (MoveTowardsLocation(hive.GetLocation("ExitLocation"))) { InsideHive = false; location = hive.GetLocation("EnterLocation"); //2-перемещаем пчелу за пределы улья, дальше она полетит к цветку } } else if (MoveTowardsLocation(destinationFlower.Location)) { //3-летим к цветку 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("EnterLocation"))) //летим обратно в улей { InsideHive = true; } } else if (MoveTowardsLocation(hive.GetLocation("FactoryLocation"))) { 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; case BeeState.Conrol: if (MoveTowardsLocation(controlDestination)) //контрол был null, поэтому пчела летела в 0,0 { NectarCollected = 0; //жалим упыря-- звук укуса if (StingGoal && BeeBeeSting != null) //на событие должны быть подписаны, если нет, то будет null { BeeBeeSting(true); CurrentState = BeeState.ReturningToHive; } } break; } if (OldState != CurrentState && messageToTheForm != null) { messageToTheForm(ID, CurrentState.ToString()); //ВЫЗОВ МЕТОДА ФОРМЫ } }