public Gene(int hp, Nutrition nutrition, int size, IDictionary <int, int> Actions) { HP = hp; Nutrition = nutrition; Size = size; ActList = Actions; }
public void SetLandNutrition(Vector2D position, Nutrition Nut) { int X = ReturnX(position.X); int Y = ReturnY(position.Y); LandNutrition[X, Y] = Nut; }
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++; }
public virtual Nutrition GetCostFromCostBase(int level, Nutrition nutbase) { float var1 = 1; for (int i = 0; i < level; i++) { var1 *= 0.95f; } return(nutbase * var1); }
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); }
/// <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); }
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(); }
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); } } }
public virtual void SetCostFromCostBase() { cost = GetCostFromCostBase(level, costbase); //basicCost = GetCostFromCostBase(level, basicCostbase); requirement = GetCostFromCostBase(level, requirementbase); }