Exemple #1
0
 public Gene(int hp, Nutrition nutrition, int size, IDictionary <int, int> Actions)
 {
     HP        = hp;
     Nutrition = nutrition;
     Size      = size;
     ActList   = Actions;
 }
Exemple #2
0
        public void SetLandNutrition(Vector2D position, Nutrition Nut)
        {
            int X = ReturnX(position.X);
            int Y = ReturnY(position.Y);

            LandNutrition[X, Y] = Nut;
        }
Exemple #3
0
        public void Update()
        {
            if (Alive == true)
            {//生存なう
                MaxHP -= agePerTick;
                HP    -= agePerTick;
                if (!isStable)
                {
                    int   freq       = 10;
                    int   SpeedLevel = 5;
                    float MaxSpeed   = 0.5F;
                    if (Program.Rand.Next(freq) == 0)
                    {
                        float Direction = (float)((Program.Rand.Next(359) / 180.0f) * Math.PI);
                        float Speed     = MaxSpeed * SpeedLevel / 10;
                        //速度はCreatureの方で持つようにしました
                        Velocity = new Vector2D((float)Math.Cos(Direction), (float)Math.Sin(Direction)) * Speed;
                    }
                }
                ActMgr.Update();
                Nutrition -= new Nutrition(Size * 5, Size, Size);
                Nutrition  = Nutrition.clamp_floor(Nutrition.ZERO);

                if (!(this.Nutrition > Nutrition.ZERO))
                {
                    this.HP = 0;
                }
                if (!(this.Nutrition < this.MaxNutrition))
                {
                    Nutrition lastNut = this.Nutrition.Copy();
                    this.Nutrition = this.Nutrition.clamp(this.MaxNutrition);
                    mgr.Land.SetLandNutrition(Position, mgr.Land.GetLandNutrition(Position) + lastNut - Nutrition);
                }

                //突然の死
                if (Program.Rand.Next(1000) == 0)
                {
                    this.HP = 0;
                }

                //Nutrition.clamp(MaxNutrition);

                if (HP <= 0)
                {
                    Alive    = false;
                    deadTime = Time;
                    //栄養ばらまく。後々は、まず死体になってそれが分解されていく感じにしたい
                    OnDied();
                }
            }
            else
            {
                if (Nutrition.Sum <= 0)
                {
                    Existence = false;
                }
            }

            Time++;
        }
Exemple #4
0
        public virtual Nutrition GetCostFromCostBase(int level, Nutrition nutbase)
        {
            float var1 = 1;

            for (int i = 0; i < level; i++)
            {
                var1 *= 0.95f;
            }
            return(nutbase * var1);
        }
Exemple #5
0
        public Gene()
        {
            Size      = Program.Rand.Next(254) + 10;
            HP        = 1 + Program.Rand.Next(255) * 64;
            Nutrition = new Nutrition(Size * 7200, Size * 7200, Size * 7200);

            /*
             * ActList.Add(Program.Rand.Next(6));
             * ActList.Add(Program.Rand.Next(6));
             * ActList.Add(Program.Rand.Next(6));
             */
            ActList.Add(0, 1);
            //ActList.Add(1);
            //ActList.Add(2,1);
            ActList.Add(7, 1);
            //ActList.Add(8);
        }
Exemple #6
0
        /// <summary>
        /// byで与えられた栄養値を下限として、現在栄養値を丸めた値を返す
        /// </summary>
        /// <param name="by"></param>
        /// <returns></returns>
        public Nutrition clamp_floor(Nutrition by)
        {
            Nutrition nut = this.Copy();

            if (nut.Red < by.Red)
            {
                nut.Red = by.Red;
            }
            if (nut.Green < by.Green)
            {
                nut.Green = by.Green;
            }
            if (nut.Blue < by.Blue)
            {
                nut.Blue = by.Blue;
            }
            return(nut);
        }
Exemple #7
0
        public Creature(CreatureMgr mgr, Gene gene, Nutrition nutrition)
        {
            this.mgr = mgr;

            Gene         = gene;
            Size         = gene.Size;
            MaxHP        = gene.HP;
            HP           = Program.Rand.Next(MaxHP);
            MaxNutrition = gene.Nutrition;
            Nutrition    = nutrition;

            ActMgr.Initialize(this, TargetList, gene.ActList);

            Time = 0;

            Existence = true;
            Alive     = true;

            Velocity = new Vector2D();
            LastVelocityMultiplier = 60f / (float)mgr.TimerMax;
            Velocitycache          = new Vector2D();
        }
Exemple #8
0
        public void Initialize(Drawer drawer)
        {
            Drawer = drawer;

            nessuihunsyutukouGraphicHandle = DX.LoadGraph("Data/nessuihunsyutukou.png");

            //Spaceを初期化
            Space            = new List <Creature> [Program.Space_X, Program.Space_Y];
            LandNutrition    = new Nutrition[Program.Space_X, Program.Space_Y];
            LandformsManager = new LandformsManager();

            LandformsManager.Initialize(this);

            for (int i = 0; i < Program.Space_X; i++)
            {
                for (int j = 0; j < Program.Space_Y; j++)
                {
                    Space[i, j]         = new List <Creature>();
                    LandNutrition[i, j] = new Nutrition();
                    LandNutrition[i, j].Rand(Nutrition.MaxValue / 4, Nutrition.MaxValue / 2);
                }
            }
        }
Exemple #9
0
 public virtual void SetCostFromCostBase()
 {
     cost = GetCostFromCostBase(level, costbase);
     //basicCost = GetCostFromCostBase(level, basicCostbase);
     requirement = GetCostFromCostBase(level, requirementbase);
 }