コード例 #1
0
ファイル: World_1.cs プロジェクト: Kuvuklija/MY-GRAFICAL-GAME
        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();
        }
コード例 #2
0
 public void Go(Random random, MessageToTheForm message)
 {
     if (World.bees.Count <= MaximumBees &&
         Honey > MinimumHoneyForCreatingBees &&
         random.Next(10) == 1)  //пчела рождается в 1 из 10 случаев
     {
         AddBee(random);
     }
 }
コード例 #3
0
        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();
        }
コード例 #4
0
ファイル: Bee.cs プロジェクト: Kuvuklija/MY-GRAFICAL-GAME
        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()); //ВЫЗОВ МЕТОДА ФОРМЫ
            }
        }