示例#1
0
        /// <summary>
        /// Обновляет информацию о последних действиях получения энергии формы жизни
        /// </summary>
        /// <param name="worldMetadata"></param>
        public void Update(WorldMetadata worldMetadata)
        {
            _energy = worldMetadata[_lifeFormId]["EnergyState"].Value;
            if (_lastEnergyReactions.Count >= 10)
            {
                _lastEnergyReactions.Dequeue();
            }
            switch (worldMetadata[_lifeFormId]["GenorypeState"]["Action"])
            {
            case "Extraction":
                _lastEnergyReactions.Enqueue("Extraction");
                break;

            case "Photosynthesis":
                _lastEnergyReactions.Enqueue("Photosynthesis");
                break;

            case "Meat":     // Имя придумано,позже необходимо привести в соответсвие с текстом команды
                _lastEnergyReactions.Enqueue("Meat");
                break;

            default:
                break;
            }
            SetRGB();
        }
示例#2
0
        private static void LoadWorld()
        {
            _quit  = false;
            _steps = 0;
            _speed = 1;

            _world         = new World(WorldMetadata.Load(_worldPath));
            _worldRenderer = new WorldRenderer(_renderer, _world);
        }
示例#3
0
        private static void MakeDefaultWorld()
        {
            var world = new WorldMetadata
            {
                W = 640,
                H = 480,

                Colors = new ColorMetadata[]
                {
                    new ColorMetadata {
                        Id = 0, RGBACode = "#000000ff"
                    },
                    new ColorMetadata {
                        Id = 1, RGBACode = "#ffffffff"
                    },
                    new ColorMetadata {
                        Id = 2, RGBACode = "#ff0000ff"
                    },
                    new ColorMetadata {
                        Id = 3, RGBACode = "#00ff00ff"
                    },
                    new ColorMetadata {
                        Id = 4, RGBACode = "#0000ffff"
                    },
                    new ColorMetadata {
                        Id = 5, RGBACode = "#ffff00ff"
                    },
                    new ColorMetadata {
                        Id = 6, RGBACode = "#00ffffff"
                    },
                    new ColorMetadata {
                        Id = 7, RGBACode = "#ff00ffff"
                    },
                    new ColorMetadata {
                        Id = 8, RGBACode = "#fff000ff"
                    },
                    new ColorMetadata {
                        Id = 9, RGBACode = "#000fffff"
                    }
                },

                Turmites = new TurmiteMetadata[]
                {
                    new TurmiteMetadata {
                        X = 320, Y = 240, Direction = Turmite.TOP, StateId = 0, Name = "langton"
                    }
                }
            };

            WorldMetadata.Save(Path.Combine(
                                   Resources.BasePath,
                                   "resources/worlds/default.xml"), world);
        }
示例#4
0
        /// <summary>
        /// Вызывает обновление интенсивности в зависимости от текущего сезона
        /// </summary>
        /// <param name="worldMetadata">Метаданные мира. В окружающей среде должен быть феномен времен года.</param>
        public void Update(WorldMetadata worldMetadata)
        {
            log.Trace(LogPhenomenMessages.PhenomenUpdate, "SunPhenomen");
            if (!worldMetadata.EnvironmentMetadata.ContainsKey("SeasonsPhenomen"))
            {
                ArgumentException ex = new ArgumentException("world metadata isn't contains SeasonPhenomen metadata", nameof(worldMetadata));
                log.Error(LogPhenomenMessages.BadInputMetadata, "SeasonsPhenomen");
                throw ex;
            }


            if (!worldMetadata.EnvironmentMetadata["SeasonsPhenomen"].ContainsParameter("season"))
            {
                ArgumentException ex = new ArgumentException("SeasonsPhenomen metadata isn't contains the parameter named \"season\"");
                log.Error(LogPhenomenMessages.BadInputMetadata, "SeasonsPhenomen");
                throw ex;
            }

            Season season = (Season)(int.Parse(worldMetadata.EnvironmentMetadata["SeasonsPhenomen"]["season"]));

            log.Info(LogPhenomenMessages.CurrentSeason, season.ToString());
            switch (season)
            {
            case Season.Autumn:
            case Season.Spring:
            {
                _powerFactor = NormalPowerFactor;
            }
            break;

            case Season.Summer:
            {
                _powerFactor = HightPowerFactor;
            }
            break;

            case Season.Winter:
            {
                _powerFactor = LowPowerFactor;
            }
            break;

            default:
            {
                Exception ex = new Exception("Impossible");
                log.Error("Сезоны отвалились,текущий сезон равен: " + season.ToString() + "  " + ex);
                throw ex;
            }
            }
        }
 /// <summary>
 /// Вызывает обновление цветов форм жизни
 /// </summary>
 /// <param name="metadata"></param>
 public void Update(WorldMetadata metadata)
 {
     if (map == null)
     {
         map  = new Bitmap(metadata.EnvironmentMetadata.Size.Width, metadata.EnvironmentMetadata.Size.Height);
         form = new MainForm();
         form.Show();
     }
     foreach (var pair in metadata)
     {
         byte[] bytes = pair.Value["ColorState"]["Color"].Split(' ').Select(x => byte.Parse(x)).ToArray();
         byte   R     = bytes[0];
         byte   G     = bytes[1];
         byte   B     = bytes[2];
         Color  color = Color.FromArgb(R, G, B);
         map.SetPixel(pair.Value.Place.Points[0].X, pair.Value.Place.Points[0].Y, color);
     }
     form.mapPicture.Image = GetMap();
 }
 public void Update(WorldMetadata metadata)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Вызывает обновление этого природного явления на основании
 /// метаданных окружающей среды.
 /// </summary>
 /// <param name="worldMetadata">Метаданные окружающей среды.</param>
 public void Update(WorldMetadata worldMetadata)
 {
     log.Trace(LogPhenomenMessages.PhenomenUpdate, "SeasonsPhenomen");
     _step = worldMetadata.Age;
     ChangeSeason();
 }
示例#8
0
        /// <summary>
        /// Обновляет действия бота в соответствии с геномом
        /// </summary>
        /// <param name="metadata"></param>
        public void Update(WorldMetadata metadata)
        {
            if (metadata[id]["EnergyState"]["EnergyState"] == "ForsedReproduction")
            {
                action = Actions.ForsedReproduction;
                NextStep();
            }
            else
            {
                switch (genom[YTK])
                {
                case 1:
                    action = Actions.CheckEnergy;
                    NextStep();
                    direction = (Directions)((genom[YTK] / 8) + 1);
                    NextStep();
                    Update(metadata);
                    break;

                case 2:
                    action = Actions.Photosynthesis;
                    NextStep();
                    break;

                case 3:
                    action = Actions.Move;
                    NextStep();
                    direction = (Directions)((genom[YTK] / 8) + 1);
                    NextStep();
                    break;

                case 4:
                    action = Actions.Eat;
                    NextStep();
                    direction = (Directions)((genom[YTK] / 8) + 1);
                    NextStep();
                    break;

                case 5:
                    if (metadata[id]["EnergyState"]["EnergyState"] == "CanReproduce")
                    {
                        action = Actions.DoDescendant;
                        NextStep();
                        direction = (Directions)((genom[YTK] / 8) + 1);
                        NextStep();
                    }
                    else
                    {
                        action    = Actions.None;
                        direction = Directions.None;
                        NextStep();
                        Update(metadata);
                    }
                    break;

                default:
                    try
                    {
                        YTK = Convert.ToByte(YTK + genom[YTK] - 1);
                    }
                    catch (Exception e)
                    {
                        throw new  ArgumentException("Недопустимое значение YTK", (YTK + genom[YTK] - 1).ToString(), e);
                    }
                    NextStep();
                    action    = Actions.None;
                    direction = Directions.None;
                    NextStep();
                    Update(metadata);
                    break;
                }
            }
        }