changeset 243:4f86c2616cdf

Variable number of eggs for chickens
author Neil Muller <drnlmuller@gmail.com>
date Sat, 05 Sep 2009 12:05:08 +0000
parents 23533f3ccd8a
children 7024d48c41c2
files gamelib/animal.py gamelib/gameboard.py
diffstat 2 files changed, 48 insertions(+), 31 deletions(-) [+]
line wrap: on
line diff
--- a/gamelib/animal.py	Sat Sep 05 11:37:03 2009 +0000
+++ b/gamelib/animal.py	Sat Sep 05 12:05:08 2009 +0000
@@ -133,8 +133,7 @@
         image_right = imagecache.load_image('sprites/chkn.png',
                 ("right_facing",))
         Animal.__init__(self, image_left, image_right, pos)
-        self.egg = None
-        self.egg_counter = 0
+        self.eggs = []
 
     def move(self, gameboard):
         """A free chicken will move away from other free chickens"""
@@ -142,21 +141,38 @@
 
     def lay(self):
         """See if the chicken lays an egg"""
-        if not self.egg:
-            self.egg = Egg(self.pos)
+        if not self.eggs:
+            for x in range(random.randint(1, 4)):
+                self.eggs.append(Egg(self.pos))
             self.equip(equipment.NestEgg())
 
-    def remove_egg(self):
+    def remove_eggs(self):
         """Clean up the egg state"""
-        self.egg = None
+        self.eggs = []
         self.unequip_by_name("nestegg")
 
-    def hatch(self):
+    def remove_one_egg(self):
+        """Clean up the egg state"""
+        self.eggs.pop()
+        if not self.eggs:
+            self.unequip_by_name("nestegg")
+
+    def get_num_eggs(self):
+        return len(self.eggs)
+
+    def hatch(self, gameboard):
         """See if we have an egg to hatch"""
-        if self.egg:
-            chick = self.egg.hatch()
+        if self.eggs:
+            chick = self.eggs[0].hatch()
             if chick:
-                self.remove_egg()
+                # sell the remaining eggs
+                # Remove hatched egg
+                self.eggs.pop() 
+                gameboard.eggs -= 1
+                # Sell other eggs
+                for egg in self.eggs[:]:
+                    gameboard.sell_one_egg(self)
+                self.remove_eggs() # clean up stale images, etc.
             return chick
         return None
 
@@ -193,13 +209,13 @@
     def __init__(self, pos):
         image = imagecache.load_image('sprites/egg.png')
         Animal.__init__(self, image, image, pos)
-        self.counter = 2
+        self.timer = 2
 
     # Eggs don't move
 
     def hatch(self):
-        self.counter -= 1
-        if self.counter == 0:
+        self.timer -= 1
+        if self.timer == 0:
             return Chicken(self.pos)
         return None
 
--- a/gamelib/gameboard.py	Sat Sep 05 11:37:03 2009 +0000
+++ b/gamelib/gameboard.py	Sat Sep 05 12:05:08 2009 +0000
@@ -376,16 +376,21 @@
         if do_sell(chick):
             self.remove_chicken(chick)
 
+    def sell_one_egg(self, chicken):
+        if chicken.eggs:
+            self.add_cash(constants.SELL_PRICE_EGG)
+            chicken.remove_one_egg()
+            self.eggs -= 1
+            self.toolbar.update_egg_counter(self.eggs)
+            return True
+        return False
+
     def sell_egg(self, tile_pos):
         def do_sell(chicken):
-            if chicken.egg:
-                # We sell the egg
-                self.add_cash(constants.SELL_PRICE_EGG)
+            # We try sell and egg
+            if self.sell_one_egg(chicken):
                 sound.play_sound("sell-chicken.ogg")
-                chicken.remove_egg()
-                self.eggs -= 1
-                self.toolbar.update_egg_counter(self.eggs)
-                # Force update
+                # Force toolbar update
                 self.toolbar.chsize()
             return False
 
@@ -433,10 +438,9 @@
             if self.animal_to_place is not None:
                 self.animal_to_place.unequip_by_name("nest")
                 self.relocate_animal(self.animal_to_place, tile_pos=tile_pos)
-                if self.animal_to_place.egg:
-                    self.animal_to_place.remove_egg()
-                    self.eggs -= 1
-                    self.toolbar.update_egg_counter(self.eggs)
+                self.eggs -= self.animal_to_place.get_num_eggs()
+                self.animal_to_place.remove_eggs()
+                self.toolbar.update_egg_counter(self.eggs)
 
     def relocate_animal(self, chicken, tile_pos=None, place=None):
         assert((tile_pos, place) != (None, None))
@@ -718,17 +722,15 @@
             if building.NAME in buildings.HENHOUSES:
                 for chicken in building.occupants():
                     chicken.lay()
-                    if chicken.egg:
-                        self.eggs += 1
+                    self.eggs += chicken.get_num_eggs()
         self.toolbar.update_egg_counter(self.eggs)
 
     def hatch_eggs(self):
         for building in self.buildings:
             if building.NAME in buildings.HENHOUSES:
                 for chicken in building.occupants():
-                    new_chick = chicken.hatch()
+                    new_chick = chicken.hatch(self)
                     if new_chick:
-                        self.eggs -= 1
                         try:
                             building.add_occupant(new_chick)
                             self.add_chicken(new_chick)
@@ -764,9 +766,8 @@
         if chick is self.animal_to_place:
             self.select_animal_to_place(None)
         self.chickens.discard(chick)
-        if chick.egg:
-            self.eggs -= 1
-            self.toolbar.update_egg_counter(self.eggs)
+        self.eggs -= chick.get_num_eggs()
+        self.toolbar.update_egg_counter(self.eggs)
         if chick.abode:
             chick.abode.clear_occupant()
         self.toolbar.update_chicken_counter(len(self.chickens))