Example #1
0
        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();
        }
Example #2
0
 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;
     }
 }
Example #3
0
        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();
        }
Example #4
0
 Fish GetIntersectingFishy(Fish mommy)
 {
     return Fishies.FirstOrDefault(dad => dad != mommy && dad.Gender != mommy.Gender && FishiesIntersect(mommy, dad) && dad.IsMature && !dad.mouseDown);
 }
Example #5
0
 bool FishiesIntersect(Fish mommy, Fish daddy)
 {
     if (daddy.DesktopBounds.Contains(mommy.DesktopLocation) ||
         mommy.DesktopBounds.Contains(daddy.DesktopLocation))
     {
         return true;
     }
     return false;
 }
Example #6
0
 public FishEventArgs(Fish fish, FishEventEnum action, string reason = "")
 {
     this.Fish = fish;
     this.Action = action;
     this.Reason = reason;
 }
Example #7
0
        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();
        }