Пример #1
0
        public override void Update(long elapsedMilliseconds)
        {
            var deers  = MapObjects.GetAll <Deer>();
            var wolves = MapObjects.GetAll <Wolf>();

            foreach (var deer in deers)
            {
                //проверяю чтобы олени не вышли из полигона
                if (deer.Coordinate.X < _leftX - _barier || deer.Coordinate.Y < _downY - _barier)
                {
                    deer._speed = _deerSeed;
                }
                else if (deer.Coordinate.X > _rightX - _barier || deer.Coordinate.Y > _upY - _barier)
                {
                    deer._speed = -_deerSeed;
                }

                deer.MoveUpRight();
            }

            foreach (var wolf in wolves)
            {
                var nearestDeer = deers.Aggregate((deer1, deer2) =>
                                                  PointExtension.Distance((Point)wolf, (Point)deer1) < PointExtension.Distance((Point)wolf, (Point)deer2) ? deer1 : deer2);
                wolf.MoveUpRight(new Coordinate(nearestDeer.X, nearestDeer.Y));

                //Ищем ближайшего волка
                var minDistance = double.MaxValue;
                foreach (var _wolf in wolves.Where(_wolf =>
                                                   (PointExtension.Distance((Point)wolf, (Point)_wolf) < minDistance) &&
                                                   (PointExtension.Distance((Point)wolf, (Point)_wolf) > 0)))
                {
                    minDistance = (PointExtension.Distance((Point)wolf, (Point)_wolf));
                }

                if (minDistance < 250)
                {
                    if (wolf._flagPack == false)
                    {
                        Console.WriteLine(minDistance);
                        wolf.WolfInThePack();
                        wolf._flagPack = true;
                    }
                }
                else
                {
                    wolf._speed    = _wolfSpeed;
                    wolf._flagPack = false;
                }

                if (!wolf.CanEat(nearestDeer))
                {
                    continue;
                }
                MapObjects.Remove(nearestDeer);
                deers.Remove(nearestDeer);
                var newDeerCoordinate = GenerateCoordinatesAnimal(1)[0];
                MapObjects.Add(new Deer(newDeerCoordinate, 10));
            }
        }
Пример #2
0
        public async Task MethodWithDelayAsync(int milliseconds)
        {
            await Task.Delay(milliseconds);

            endResearch = true;
            MapObjects.Remove(objRes);
            Console.WriteLine("Исследование закончилось 😎😎😎😎");

            // ищем ближайщий объект
            int    minIndex = 0;
            double min      = 0;
            int    i        = 0;
            var    objOnMap = MapObjects.GetAll <ObjResearch>();

            foreach (var minDist in objOnMap)
            {
                if (min == 0)
                {
                    min = TestModule.Distance(submarine, minDist);
                    i++;
                    continue;
                }

                if (min > TestModule.Distance(submarine, minDist))
                {
                    min      = TestModule.Distance(submarine, minDist);
                    minIndex = i;
                }
                i++;
            }

            objRes = objOnMap[minIndex];
        }
        // Этот метод вызывается регулярно, поэтому тут все действия, которые будут повторяться
        public override void Update(long elapsedMilliseconds)
        {
            var actors = MapObjects.GetAll <Actor>();

            Console.WriteLine($"Got {actors.Count} actors\n");

            // Для каждого актёра проверяем условия и назначаем новую активность если нужно
            foreach (var actor in actors)
            {
                // Есть ли активность
                bool isActivity = actor.Activity != null;

                // Если активность дороги домой
                bool goHome = isActivity ? actor.Activity is MovementActivityHome : false;

                // Если ли активность ожидания
                bool goWait = isActivity ? actor.Activity is WaitingActivityHome : false;


                Console.WriteLine($"Flags: {isActivity} {goHome} {goWait}");

                if (!isActivity)
                {
                    // Назначить актору путь до дома
                    Console.WriteLine("Said actor go home\n");
                    actor.Activity = new MovementActivityHome();
                }
            }
        }
        // Этот метод будет вызван один раз при запуске, соответственно тут вся инициализация
        protected override void Initialize()
        {
            State state = new State()
            {
                Hunger = 100,

                // Интервал можно задать через объекты LocalTime
                HomeTime = new TimeInterval(new LocalTime(20, 0), new LocalTime(18, 23)),
            };

            // Создаём акторов
            for (int i = 0; i < 2; i++)
            {
                Console.WriteLine($"Creating actor {i + 1}");

                // Делаем для каждого точку дома и точку работы в квадрате заданного радиуса от точки спавна
                state.Home = new Point(x + offset, y + offset);
                state.Job  = new Point(x + offset, y + offset);

                Console.WriteLine($"Home at {state.Home.X}, {state.Home.Y}; " +
                                  $"Job at {state.Job.X}, {state.Job.Y}");

                // Создаём актора с заданным состоянием
                // Так как в конструкторе актора состояние копируется,
                // можно использовать один и тот же объект состояния для инициализации,
                // при этом каждый актор получит отдельный объект, не связанный с другими
                Actor actor = new Actor(x, y, state);

                // Добавляем актора в объекты карты
                MapObjects.Add(actor);

                var firstCoordinate  = new Coordinate(x, y);
                var secondCoordinate = new Coordinate(state.Home.X, state.Home.Y);

                Console.WriteLine($"Coor {firstCoordinate} and {secondCoordinate}");


                Console.WriteLine("Building path...");
                MapObjects.Add(new Highlighted(new Geometry[]
                {
                    PathsFinding.GetPath(firstCoordinate, secondCoordinate, "Walking").Result
                }));
                Console.WriteLine("Path was builded");
            }

            // Получаем список акторов на карте и выводим их количество
            var actors = MapObjects.GetAll <Actor>();

            Console.WriteLine($"Added {actors.Count} actors");

            foreach (var actor in actors)
            {
                Console.WriteLine($"Actor on ({actor.Coordinate.X}, {actor.Coordinate.Y})\n" +
                                  $"\tHome at {actor.State.Home.X}, {actor.State.Home.Y}\n");
            }
        }
Пример #5
0
 protected override void Initialize()
 {
     //Добавление созданных объектов в общий список, доступный всем модулям. Объекты из данного списка отображаются на карте.
     MapObjects.Add(new Airport(china, 20));
     MapObjects.Add(new Airport(moscow, 13));
     MapObjects.Add(new Airport(iraq, 9));
     MapObjects.Add(new Airport(afganistan, 7));
     MapObjects.Add(new Airport(usa, 17));
     allAirports = MapObjects.GetAll <Airport>();
 }
Пример #6
0
 //Движение самолетов в их пункты назначения-аэропорты и их удаление при достижении пункта назначения
 public void Fly()
 {
     foreach (var airplane in MapObjects.GetAll <Airplane>())
     {
         int flew = airplane.MoveToAirport();
         if (flew != -1)
         {
             RemoveAirplane(airplane);
         }
     }
 }
Пример #7
0
 //Создание самолетов в аэропорте, если они там существуют
 public void CreateAirplanes()
 {
     foreach (var airport in allAirports)
     {
         if (airport.Count != 0)
         {
             CreateAirplane(airport.FlyOff(allAirplanes.Count, allAirports[new Random().Next(0, 5)]));
             allAirplanes = MapObjects.GetAll <Airplane>();
         }
     }
 }
Пример #8
0
        protected override void Initialize()
        {
            // добавляем регион подводной лодки и подлодку
            MapObjects.Add(new Region(_leftX, _rightX, _upY, _downY).polygon);
            MapObjects.Add(new Submarine(new Coordinate(-14000000, -7000000), 5000));

            // создаем таймер на создание объектов для исследование каждые 5с
            Init();

            //Получим объект подлодки и объекта для исследования
            objRes    = MapObjects.GetAll <ObjResearch>()[0];
            submarine = MapObjects.GetAll <Submarine>()[0];
        }
        /// <summary>
        /// Вызывается постоянно, здесь можно реализовывать логику перемещений и всего остального, требующего времени.
        /// </summary>
        /// <param name="elapsedMilliseconds">TimeNow.ElapsedMilliseconds</param>
        public override void Update(long elapsedMilliseconds)
        {
            // Двигаем самолет.
            submarine.MoveToObj(MapObjects);

            if (MapObjects.GetAll <Point>().Count < 10)
            {
                int x = random.Next(-6500000, -4500000);
                int y = random.Next(2500000, 4500000);

                var obj = new IntrestingObj(new Coordinate(x, y));

                MapObjects.Add(obj);
            }
        }
Пример #10
0
        public override void Update(long elapsedMilliseconds)
        {
            // List<Truck> trucks = MapObjects.GetAll<Truck>();
            List <Provider> Providers = MapObjects.GetAll <Provider>();
            List <Customer> Customers = MapObjects.GetAll <Customer>();
            var             truks     = MapObjects.GetAll <Truck>();

            if (truks.Count < 35 && Rand.MayBe(0.2))
            {
                var weight = Rand.GenerateInRange(250, 5000);
                MapObjects.Add(new Truck(new Coordinate(Providers[Rand.GenerateInRange(0, 17)].Coordinate), weight, Rand.GenerateInRange(80, 130), new Coordinate(Customers[Rand.GenerateInRange(0, 32)].Coordinate)));
                Console.WriteLine("Машина отправлена " + weight + " кг");
            }
            if (Rand.MayBe(0.001))
            {
                Console.WriteLine("Машина сломалась");
                MapObjects.Remove(truks[Rand.GenerateInRange(1, truks.Count - 1)]);
            }

            truks = MapObjects.GetAll <Truck>();
            foreach (var truck in truks)
            {
                if (!truck.InObj())
                {
                    truck.Move();
                }
                else if (truck.loaded)
                {
                    Console.WriteLine("Машина доехала до заказчика");
                    truck.loaded = false;
                    truck.goHome();
                }
                else if (!truck.loaded)
                {
                    Console.WriteLine("Машина приехала с заказа");

                    MapObjects.Remove(truck);
                }
            }



            //Console.WriteLine(MapObjects.GetAll<Truck>().Count);
        }
Пример #11
0
        public override void Update(long elapsedMilliseconds)
        {
            Generator          generator        = MapObjects.Get <Generator>()[0];
            DispatherStation   dispatherStation = MapObjects.Get <DispatherStation>()[0];
            List <Wire>        wires            = MapObjects.GetAll <Wire>();
            List <Consumer>    consumers        = MapObjects.GetAll <Consumer>();
            List <Electritian> electritians     = MapObjects.GetAll <Electritian>();

            List <Electritian> freeElectritians = electritians.Where(x => x.target == null).ToList();

            foreach (var consumer in consumers)
            {
                bool consumedSuccessfully = consumer.Consume(elapsedMilliseconds);
                bool consumerIsPending    = dispatherStation.consumersBeingProcessed.ContainsKey(consumer) && dispatherStation.consumersBeingProcessed[consumer];
                if (!consumedSuccessfully && !consumerIsPending)
                {
                    Console.WriteLine(String.Format("Потребитель {0} отправил запрос", consumer.getName()));
                    dispatherStation.consumersBeingProcessed[consumer] = true;
                    dispatherStation.pendingRequests.Add(consumer);
                }
            }

            while (freeElectritians.Count > 0 && dispatherStation.pendingRequests.Count > 0)
            {
                freeElectritians[0].setConsumerProcessed(dispatherStation.pendingRequests[0]);
                Console.WriteLine(String.Format("Электрик отправился выполнять запрос {0}", dispatherStation.pendingRequests[0].getName()));
                freeElectritians.RemoveAt(0);
                dispatherStation.pendingRequests.RemoveAt(0);
            }

            foreach (Electritian e in electritians)
            {
                e.MovePath();
            }

            foreach (Electritian e in electritians.Where(x => x.target != null).ToList())
            {
                if (e.Distance(e.target.getCoordinate()) < 1)
                {
                    bool isFixed = false;
                    if (e.target.isBroken())
                    {
                        e.target.getFixed();
                        isFixed = true;
                        Console.WriteLine(String.Format("Провод {0} починен", e.target.getName()));
                    }
                    else
                    {
                        var source = e.target.getElectriticySource();
                        if (source == null)
                        {
                            isFixed = true;
                        }
                        else
                        {
                            e.setTarget(source);
                        }
                    }

                    if (isFixed)
                    {
                        dispatherStation.consumersBeingProcessed[e.consumerBeingProcessed] = false;
                        e.clearConsumerProcessed();
                    }
                }
            }
        }
        public override void Update(long elapsedMilliseconds)
        {
            var waterPump           = MapObjects.Get <WaterPump>()[0];
            var treatmentFacilities = MapObjects.Get <TreatmentFacilities>()[0];
            var reservoir           = MapObjects.Get <Reservoir>()[0];
            var conduit             = MapObjects.GetAll <Conduit>();
            var users      = MapObjects.GetAll <User>();
            var riverWater = MapObjects.GetAll <RiverWater>();
            var cleanWater = MapObjects.GetAll <CleanWater>();

            // Проверяем не сломан ли насос
            if (!waterPump.CheckFailure())
            {
                if (reservoir._volumeOfWaterInTheReservoir < reservoir._minVolumeOfWater &&
                    waterFromRiver < reservoir._size - reservoir._volumeOfWaterInTheReservoir - 1000)
                {
                    var water = new RiverWater(new Coordinate(waterIntakeCoord),
                                               MoveValue(waterIntakeCoord, waterPumpCoord, 50));
                    MapObjects.Add(water);
                    waterFromRiver += rnd.Next(800, 1000);
                    Console.WriteLine($"Перемещение {waterFromRiver} литров воды в резервуары");
                }

                if (riverWater != null)
                {
                    if (errFlag)
                    {
                        Console.WriteLine("Насос в норме!");
                        errFlag = false;
                    }
                    foreach (var water in riverWater)
                    {
                        water.Move();
                        if (water.InPlace(waterPump))
                        {
                            Console.WriteLine("Насос пройден");
                            (water._moveX, water._moveY) =
                                MoveValue(waterPumpCoord, treatmentFacilitiesCoord, 200);
                        }

                        if (water.InPlace(treatmentFacilities))
                        {
                            Console.WriteLine("Система очистки пройдена");
                            (water._moveX, water._moveY) =
                                MoveValue(treatmentFacilitiesCoord, reservoirCoord, 50);
                        }

                        if (water.InPlace(reservoir))
                        {
                            reservoir.GetWater(waterFromRiver);
                            waterFromRiver = 0;
                            MapObjects.Remove(water);
                            Console.WriteLine($"В резервуаре {reservoir._volumeOfWaterInTheReservoir} тонн воды");
                        }
                    }
                }

                if (users == null)
                {
                    return;
                }
                {
                    foreach (var user in users)
                    {
                        if (user.flag)
                        {
                            continue;
                        }
                        var waterToUserCoord = user.GetNearestPoint(conduit);
                        var waterToUser      = new CleanWater(waterToUserCoord,
                                                              MoveValue(waterToUserCoord, user.Coordinate, rnd.Next(50, 150)));
                        MapObjects.Add(waterToUser);
                        user.flag = true;
                    }

                    if (cleanWater == null)
                    {
                        return;
                    }
                    foreach (var water in cleanWater)
                    {
                        foreach (var user in users.Where(user => water.InPlace(user)))
                        {
                            reservoir.ToGiveWaterOfUser(rnd.Next(5, 25));
                            MapObjects.Remove(water);
                            MapObjects.Remove(user);
                            var newUserCoord = GenerateCoordinatesUsers(1);
                            MapObjects.Add(new User(newUserCoord.ElementAt(0)));
                        }

                        water.Move();
                    }
                }
            }
            else
            {
                Console.WriteLine("Насос сломался!");
                errFlag        = true;
                waterFromRiver = 0;
                foreach (var river_water in riverWater)
                {
                    MapObjects.Remove(river_water);
                }
                foreach (var clean_water in cleanWater)
                {
                    MapObjects.Remove(clean_water);
                }

                foreach (var user in users)
                {
                    user.flag = false;
                }
            }
        }
Пример #13
0
        protected override void Initialize()
        {
            #region создание базовых объектов
            // (Следует обратить внимание, что все координаты у всех геометрических объектов задаются в сферической проекции Меркатора (EPSG:3857).)
            // Создание координаты точки в начале координат.
            var pointCoordinate = new Coordinate(0, 0);
            // Создание стандартной точки в созданных ранее координатах.
            point = new Point(pointCoordinate);

            // Создание координат для линии.
            var lineCoordinates = new Coordinate[] {
                point.Coordinate,
                new Coordinate(0, -2000000),
                new Coordinate(-3000000, -1500000)
            };
            // Создание стандартной кривой линии по ранее созданным координатам.
            line = new LineString(lineCoordinates);

            // Создание координат полигона.
            var polygonCoordinates = new Coordinate[] {
                new Coordinate(4000000, 5000000),
                new Coordinate(6000000, 0),
                new Coordinate(6000000, 6000000),
                new Coordinate(4000000, 5000000)
            };
            // Создание стандартного полигона по ранее созданным координатам.
            polygon = new Polygon(new LinearRing(polygonCoordinates));

            #endregion

            #region создание базовых объектов

            // Добавление созданных объектов в общий список, доступный всем модулям. Объекты из данного списка отображаются на карте.
            MapObjects.Add(point);
            MapObjects.Add(line);
            MapObjects.Add(polygon);

            #endregion

            #region создание кастомного объекта и добавление на карту, модификация полигона заменой точки

            // Координаты самолёта, сконвертированные из Lat/Lon координат. Примерно в аэропорту "Internacional de Carrasco".
            var airplaneCoordinate = MathExtensions.LatLonToSpherMerc(-34.831747, -56.020034);
            // Скорость самолета, опять же, в сферической проекции Меркатора.
            var airplaneSpeed = 1000;
            // Создание объекта класса "самолет", реализованного в рамках данного модуля.
            airplane = new Airplane(airplaneCoordinate, airplaneSpeed);
            // Добавление самолета в список объектов.
            MapObjects.Add(airplane);

            // Заменим одну из точек ранее созданного полигона только что созданным самолетом.
            polygonCoordinates[2] = airplaneCoordinate;

            #endregion

            #region демонстрация получения данных из коллекции MapObjects
            // Коллекция MapObjects нужна не только для хранения и отображения объектов, но ещё и для удобного доступа к ним.

            // Попробуем получить все объекты, являющиеся строго точками.
            var onlyPoints = MapObjects.Get <Point>(); // Будет возвращена точка, созданная в самом начале.

            // А теперь получим все объекты, являющиеся точками и наследующиеся от точек (а также наследников наследников).
            var allPoints = MapObjects.GetAll <Point>(); // Будет возвращена точка, созданная в самом начале и самолет.

            // А теперь получим ВСЕ объекты на карте.
            var allMapObjects = MapObjects.GetAll <Geometry>(); // Будут возвращены все 4 созданных нами объекта.

            #endregion
        }
Пример #14
0
        public override void Update(long elapsedMilliseconds)
        {
            int check = 0;

            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (ospa.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenOspa)
                {
                    MapObjects.Add(new HumanVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Оспа", "Airborne", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Вирус оспы появился на карте!");
                    checkGenOspa = false;
                    break;
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (animVirus.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenAnim)
                {
                    MapObjects.Add(new AnimalVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Вирус животного", "Airborne", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Вирус животного появился на карте!");
                    checkGenAnim = false;
                    break;
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (univ.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenUniv)
                {
                    MapObjects.Add(new UniversalVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Универсальный вирус", "Contact", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Универсальный вирус появился на карте!" + MapObjects.GetAll <UniversalVirus>()[0]);
                    checkGenUniv = false;
                    break;
                }
            }

            if (checkGenOspa == false && checkGenAnim == false && checkGenUniv == false)
            {
                //пытаться заразить всех оспой
                foreach (var vir in MapObjects.GetAll <HumanVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Оспа")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new HumanVirus(new Coordinate(person.X + 1, person.Y + 1), "Оспа", "Airborne", 20, person));
                                Console.WriteLine("Вирус оспы добавлен на карту!");
                            }
                        }
                    }
                }
                //пытаться заразить всех животным вирусом
                foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Вирус животного")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new AnimalVirus(new Coordinate(person.X + 1, person.Y + 1), "Вирус животного", "Airborne", 20, person));
                                Console.WriteLine("Вирус животного добавлен на карту!");
                            }
                        }
                    }
                }
                //пытаться заразить всех универсальным вирусом
                foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Универсальный вирус")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new UniversalVirus(new Coordinate(person.X + 1, person.Y + 1), "Универсальный вирус", "Contact", 20, person));
                                Console.WriteLine("Универсальный вирус добавлен на карту!");
                            }
                        }
                    }
                }

                foreach (var person in MapObjects.GetAll <VitalFunctions>())
                {
                    if (person.infectionName == "Оспа")
                    {
                        Console.WriteLine("Количество человеческих вирусов на карте: " + MapObjects.GetAll <HumanVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 1) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <HumanVirus>())
                            {
                                if (vir.hum == person)
                                {
                                    Console.WriteLine("Вирус оспы удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }
                    else if (person.infectionName == "Вирус животного")
                    {
                        Console.WriteLine("Количество животных вирусов на карте: " + MapObjects.GetAll <AnimalVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 2) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                            {
                                if (vir.animal == person)
                                {
                                    Console.WriteLine("Вирус животного удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }
                    else if (person.infectionName == "Универсальный вирус")
                    {
                        Console.WriteLine("Количество универсальных вирусов на карте: " + MapObjects.GetAll <UniversalVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 3) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                            {
                                if (vir.who == person)
                                {
                                    Console.WriteLine("Универсальный вирус удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }

                    int go = person.Move();
                    //идём в рандомное место
                    if (go == -1)
                    {
                        switch (new Random().Next(0, 4))
                        {
                        case 0:
                            person.CoordTo = new Coordinate(person.Coord.X + new Random().Next(0, 500), person.Coord.Y + new Random().Next(0, 500));
                            break;

                        case 1:
                            person.CoordTo = new Coordinate(person.Coord.X + new Random().Next(0, 500), person.Coord.Y - new Random().Next(0, 500));
                            break;

                        case 2:
                            person.CoordTo = new Coordinate(person.Coord.X - new Random().Next(0, 500), person.Coord.Y + new Random().Next(0, 500));
                            break;

                        case 3:
                            person.CoordTo = new Coordinate(person.Coord.X - new Random().Next(0, 500), person.Coord.Y - new Random().Next(0, 500));
                            break;
                        }
                    }
                }

                foreach (var vir in MapObjects.GetAll <HumanVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var person in MapObjects.GetAll <VitalFunctions>())
                {
                    if (person.infected)
                    {
                        Console.WriteLine(person + " болен " + person.infectionName + " и имеет " + person.health + " здоровья");
                    }
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (!MapObjects.GetAll <VitalFunctions>()[i].infected)
                {
                    check++;
                }
                if (check == 7)
                {
                    Console.WriteLine("Все вылечились!");
                }
            }
        }