Пример #1
0
 private void pictureBox_MouseEnter(object sender, EventArgs e)
 {
     if (!TurningTimer.Enabled)
     {
         PictureBox picturebox = sender as PictureBox;
         int        x          = (int)picturebox.Tag / Map.Height;
         int        y          = (int)picturebox.Tag % Map.Height;
         string     line       = "";
         int        count      = 0;
         foreach (Animal animal in MAP.animalsList)
         {
             if (animal.coordX == x && animal.coordY == y)
             {
                 count++;
                 if (animal.GetType() == typeof(Rabbit))
                 {
                     Rabbit rabbit = animal as Rabbit;
                     line += "  Кролик       Возраст: " + rabbit.age + "\n";
                 }
                 if (animal.GetType() == typeof(Wolf))
                 {
                     Wolf wolf = animal as Wolf;
                     line += "  Волк       Возраст: " + wolf.age + "   Сытость: " + wolf.hunger + "\n";
                 }
                 if (animal.GetType() == typeof(Shewolf))
                 {
                     Shewolf shewolf = animal as Shewolf;
                     if (shewolf.pregnancy > 0)
                     {
                         line += "  Волчица       Возраст: " + shewolf.age + "   Сытость: " + shewolf.hunger + "   Беременность: " + shewolf.pregnancy + "\n";
                     }
                     else
                     {
                         line += "  Волчица       Возраст: " + shewolf.age + "   Сытость: " + shewolf.hunger + "   Не беременна" + "\n";
                     }
                 }
             }
         }
         if (count == 0)
         {
             toolTip1.SetToolTip(space[x, y], "В этой клетке нет животных");
         }
         else
         {
             toolTip1.SetToolTip(space[x, y], "Всего животных в клетке: " + count + " \n" + line);
         }
     }
 }
Пример #2
0
 void SpawnAnimals()         //генерация животных
 {
     for (int i = 0; i < MAP.RabbitsStartCount; i++)
     {
         Rabbit t = new Rabbit(random.Next(Map.Height), random.Next(Map.Width)); //создание объекта класса "Кролик" со случайными координатами
         t.age = MAP.RabbitIsAdult + 1;                                          //присвоение возраста
         MAP.animalsList.Add(t);                                                 //добавление в общий список животных
     }
     for (int i = 0; i < MAP.WolvesStartCount; i++)
     {
         Wolf t = new Wolf(random.Next(Map.Height), random.Next(Map.Width)); //создание объекта класса "Волк" со случайными координатами
         t.age = MAP.WolfIsAdult + 1;                                        //присвоение возраста
         MAP.animalsList.Add(t);                                             //добавление в общий список животных
     }
     for (int i = 0; i < MAP.ShewolvesStartCount; i++)
     {
         Shewolf t = new Shewolf(random.Next(Map.Width), random.Next(Map.Height)); //создание объекта класса "Волчица" со случайными координатами
         t.age = MAP.WolfIsAdult + 1;                                              //присвоение возраста
         MAP.animalsList.Add(t);                                                   //добавление в общий список животных
     }
 }
Пример #3
0
        List <Animal> TempAnimalsList = new List <Animal>(); //дополнительный список животных
        public void Turn()                                   //основная функция хода всех животных
        {
            //
            //ходы кроликов
            //
            foreach (Animal animal in animalsList)                           //цикл по общему списку животных
            {
                if (animal.GetType() == typeof(Rabbit))                      //если данное животное - это кролик
                {
                    Rabbit rabbit = animal as Rabbit;                        //приведение объекта к типу "Кролик" для дальнейшей работы с ним
                    rabbit.age++;                                            //взросление кролика

                    List <int[]> Directions = rabbit.CheckDirections();      //определение возможных направлений хода
                    int          rand       = random.Next(Directions.Count); //выбор случайной пары координат
                    rabbit.coordX = Directions[rand][0];                     //перемещение кролика
                    rabbit.coordY = Directions[rand][1];                     //

                    if (random.Next(5) == 1 && rabbit.age > RabbitIsAdult)   //если кролик взрослый, то с вероятностью 0,2 создаётся новый кролик
                    {
                        tempAnimalsList.Add(new Rabbit(rabbit.coordX, rabbit.coordY));
                    }

                    if (rabbit.age == RabbitsDeath)                   //если кролик старый
                    {
                        rabbit.isDead = true;                         //смерть кролика
                    }
                }
            }

            CleanList();             //исключение мёртвых животных из списка
            TransferToMainList();    //перенос крольчат из временного списка в основной
            //
            //ходы волков и волчиц
            //
            foreach (Animal animal in animalsList)                                           //цикл по общему списку животных
            {
                if (animal.GetType() == typeof(Wolf) || animal.GetType() == typeof(Shewolf)) //если данное животное - это волк или волчица
                {
                    Wolf wolf = animal as Wolf;                                              //приведение объекта к типу "Волк" для дальнейшей работы с ним
                    wolf.age++;                                                              //взросление волка
                    bool initiative = true;                                                  //инициатива

                    List <int[]> Directions = wolf.CheckDirections();                        //вычисление возможных направлений движения

                    if (animal.GetType() == typeof(Shewolf))                                 //если данное животное - это волчица
                    {
                        Shewolf shewolf = animal as Shewolf;
                        if (shewolf.pregnancy == 1)                                            //если беременность подходит к концу
                        {
                            if (random.Next(2) == 0)                                           //выбор пола волчонка
                            {
                                tempAnimalsList.Add(new Wolf(shewolf.coordX, shewolf.coordY)); //рождение
                            }
                            else
                            {
                                tempAnimalsList.Add(new Shewolf(shewolf.coordX, shewolf.coordY));                                 //рождение
                            }
                        }
                        if (shewolf.pregnancy > 0)
                        {
                            shewolf.pregnancy--;                             //увеличение срока
                        }
                    }

                    if (wolf.hunger <= 6 && wolf.age >= WolfIsAdult)                     //если волк взрослый и голоден, начинается поиск кроликов
                    {
                        for (int i = 0; i < Directions.Count; i++)                       //кролики ищутся в клетках, доступных для перемещения
                        {
                            foreach (Animal an in animalsList)
                            {
                                if (an.GetType() == typeof(Rabbit))
                                {
                                    Rabbit rabbit = an as Rabbit;

                                    if (rabbit.coordX == Directions[i][0] && rabbit.coordY == Directions[i][1] &&
                                        !rabbit.isDead)                                            //если кролик в нужной клетке и ещё не съеден
                                    {
                                        wolf.coordX   = Directions[i][0];                          // перемещение волка к кролику
                                        wolf.coordY   = Directions[i][1];                          //
                                        rabbit.isDead = true;                                      //волк кушает кролика
                                        wolf.hunger  += 10;                                        //повышение сытости
                                        initiative    = false;                                     //инициатива отключается
                                    }
                                    if (!initiative)
                                    {
                                        break;
                                    }
                                }
                            }
                            if (!initiative)
                            {
                                break;
                            }
                        }
                    }
                    if (initiative && wolf.age >= WolfIsAdult)                     //поиск партнёра для размножения
                    {
                        if (animal.GetType() == typeof(Wolf))                      //если животное - волк, то ищется волчица
                        {
                            foreach (Animal an in animalsList)
                            {
                                if (an.GetType() == typeof(Shewolf))
                                {
                                    Shewolf s = an as Shewolf;
                                    for (int i = 0; i < Directions.Count; i++)                                     //поиск в клетках, доступных для перемещения
                                    {
                                        if (s.coordX == Directions[i][0] && s.coordY == Directions[i][1] &&
                                            s.age >= 2 && s.pregnancy == 0 && !s.isDead)                 //если координаты и остальные условия совпадают
                                        {
                                            wolf.coordX = Directions[i][0];                              // перемещение к волчице
                                            wolf.coordY = Directions[i][1];                              //
                                            s.pregnancy = 3;                                             //волчица забеременела
                                            initiative  = false;                                         //инициатива отключается
                                        }
                                        if (!initiative)
                                        {
                                            break;
                                        }
                                    }
                                    if (!initiative)
                                    {
                                        break;
                                    }
                                }
                            }
                        }
                        else                         //если животное - волчица, то ищется волк
                        {
                            Shewolf shewolf = animal as Shewolf;
                            if (shewolf.pregnancy == 0)                             //если волчица сейчас не беременна
                            {
                                foreach (Animal an in animalsList)
                                {
                                    if (an.GetType() == typeof(Wolf))
                                    {
                                        Wolf w = an as Wolf;
                                        for (int i = 0; i < Directions.Count; i++)                                         //поиск в клетках, доступных для перемещения
                                        {
                                            if (w.coordX == Directions[i][0] && w.coordY == Directions[i][1] &&
                                                w.age >= 2 && !w.isDead)                                            //если координаты и остальные условия совпадают
                                            {
                                                wolf.coordX       = Directions[i][0];                               // перемещение к волку
                                                wolf.coordY       = Directions[i][1];                               //
                                                shewolf.pregnancy = 3;                                              //волчица забеременела
                                                initiative        = false;                                          //инициатива отключается
                                            }
                                            if (!initiative)
                                            {
                                                break;
                                            }
                                        }
                                        if (!initiative)
                                        {
                                            break;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    wolf.hunger -= 1;                                //уменьшение сытости за ход
                    if (wolf.hunger == 0 || wolf.age == WolvesDeath) //смерть волка от голода или от старости
                    {
                        wolf.isDead = true;
                        continue;
                    }
                    if (initiative)                     //просто ход в случайном направлении (при отсутствии других вариантов)
                    {
                        int rand = random.Next(Directions.Count);
                        wolf.coordX = Directions[rand][0];
                        wolf.coordY = Directions[rand][1];
                    }
                }
            }
            CleanList();             //исключение мёртвых животных из списка
            TransferToMainList();    //перенос волчат из временного списка в основной
        }