Mercurial > rinkhals
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))