Mercurial > rinkhals
changeset 224:c279ad59b8e2
Chicks fill hen house, then adjacent spaces, then die.
author | Simon Cross <hodgestar@gmail.com> |
---|---|
date | Fri, 04 Sep 2009 22:59:14 +0000 |
parents | 527a5d4e3fa3 |
children | 97a22d0b0471 |
files | gamelib/buildings.py gamelib/gameboard.py |
diffstat | 2 files changed, 23 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/gamelib/buildings.py Fri Sep 04 22:39:19 2009 +0000 +++ b/gamelib/buildings.py Fri Sep 04 22:59:14 2009 +0000 @@ -121,6 +121,21 @@ for dy in xrange(ysize): yield (xpos + dx, ypos + dy) + def adjacent_tiles(self): + """Return pairs of (x, y) tile positions for each of the tiles + adjacent to the building. + """ + xpos, ypos = self.pos + xsize, ysize = self.size + + for dx in xrange(xsize): # top and bottom + yield (xpos + dx, ypos - 1) + yield (xpos + dx, ypos + ysize) + + for dy in xrange(ysize): # left and right + yield (xpos - 1, ypos + dy) + yield (xpos + xsize, ypos + dy) + def loop(self, tv, _sprite): ppos = tv.tile_to_view(self.pos) self.rect.x = ppos[0]
--- a/gamelib/gameboard.py Fri Sep 04 22:39:19 2009 +0000 +++ b/gamelib/gameboard.py Fri Sep 04 22:59:14 2009 +0000 @@ -712,10 +712,17 @@ self.add_chicken(new_chick) new_chick.equip(equipment.Nest()) except buildings.BuildingFullError: + # No space in the hen house, look nearby + for tile_pos in building.adjacent_tiles(): + if self.tv.get(tile_pos) != self.GRASSLAND: + continue + if self.get_outside_chicken(tile_pos) is None: + self.add_chicken(new_chick) + self.relocate_animal(new_chick, tile_pos=tile_pos) + break # if there isn't a space for the # new chick it dies. :/ Farm life # is cruel. - pass self.toolbar.update_egg_counter(self.eggs) def kill_fox(self, fox):