void SpawnFishies() { var mommyFish = new Fish(true, new Point(-100, (Screen.PrimaryScreen.Bounds.Height / 2) - 50), 0.5, Fish.FishGender.Female); var daddyFish = new Fish(false, new Point(Screen.AllScreens.Sum(x => x.Bounds.Width) + 100, (Screen.PrimaryScreen.Bounds.Height / 2) - 50), 0.5, Fish.FishGender.Male); var random = new Random(); mommyFish.BirthDate = DateTime.Now.AddMinutes(-1 * random.Next(2, 12)); daddyFish.BirthDate = DateTime.Now.AddMinutes(-1 * new Random(random.Next()).Next(2, 12)); mommyFish.LocationChanged += Fishie_Moved; mommyFish.FishEvent += Fishie_Event; daddyFish.LocationChanged += Fishie_Moved; daddyFish.FishEvent += Fishie_Event; Fishies.Add(mommyFish); Fishies.Add(daddyFish); mommyFish.Show(); daddyFish.Show(); }
void Fishie_Event(object sender, Fish.FishEventArgs e) { switch (e.Action) { case Fish.FishEventEnum.Born: Log("Fishy {0} was born", e.Fish.ToString()); break; case Fish.FishEventEnum.Matured: Log("Fishy {0} matured", e.Fish.ToString()); break; case Fish.FishEventEnum.Died: Fishie_Died_Sadface(sender, e); break; case Fish.FishEventEnum.Resurrected: Log("Fishy {0} {1}", e.Fish.ToString(), e.Reason); break; case Fish.FishEventEnum.Flushed: Log("Fishy {0} {1}", e.Fish.ToString(), e.Reason); break; default: break; } }
void Fishie_Died_Sadface(object sender, Fish.FishEventArgs e) { Log("Fishy {0} {1}", e.Fish.ToString(), e.Reason); var t = new System.Threading.Thread(() => { exitHandle.WaitOne(1000 * 60 * 5); if (e.Fish.IsDead) e.Fish.Flush(); }); t.Start(); if (!Fishies.Any(fishie => !fishie.IsDead)) SpawnFishies(); }
Fish GetIntersectingFishy(Fish mommy) { return Fishies.FirstOrDefault(dad => dad != mommy && dad.Gender != mommy.Gender && FishiesIntersect(mommy, dad) && dad.IsMature && !dad.mouseDown); }
bool FishiesIntersect(Fish mommy, Fish daddy) { if (daddy.DesktopBounds.Contains(mommy.DesktopLocation) || mommy.DesktopBounds.Contains(daddy.DesktopLocation)) { return true; } return false; }
public FishEventArgs(Fish fish, FishEventEnum action, string reason = "") { this.Fish = fish; this.Action = action; this.Reason = reason; }
public Fish[] CreateBaby(Fish daddy) { var babies = new List<Fish>(); if (new Random().NextDouble() > 0.8) { this.LastBred = DateTime.Now; daddy.LastBred = DateTime.Now; var location = new Point(this.Location.X - this.Width, this.Location.Y); var babyFish = new Fish(this.toRight, location, 0.4); babyFish.Show(); babies.Add(babyFish); var seed = new Random().NextDouble(); if (seed < 0.2) { // Twins babyFish = new Fish(this.toRight, location, 0.4); babyFish.Show(); babies.Add(babyFish); } if (seed < 0.05) { // Triplets babyFish = new Fish(this.toRight, location, 0.4); babyFish.Show(); babies.Add(babyFish); } if ((Math.Round(new Random((int)(seed * 10)).NextDouble(), 2) < 0.1)) { Kill("died in child birth."); } } return babies.ToArray(); }