Mercurial > rinkhals
diff gamelib/level.py @ 392:bb75979b58e6
Move game_over logic from gameboard to level, for later reworking
author | Neil Muller <drnlmuller@gmail.com> |
---|---|
date | Sun, 01 Nov 2009 21:08:43 +0000 |
parents | 463802281182 |
children | e83ec14163f2 |
line wrap: on
line diff
--- a/gamelib/level.py Thu Oct 29 21:09:22 2009 +0000 +++ b/gamelib/level.py Sun Nov 01 21:08:43 2009 +0000 @@ -6,46 +6,69 @@ from ConfigParser import RawConfigParser class Level(object): - """Container for level details""" + """Container for level details""" - def __init__(self, level_name): - default_map = '%s.tga' % level_name - level_info = data.filepath('levels/%s.conf' % level_name) - # Load the level info file - # setup defaults - defaults = { - 'map' : default_map, - 'level name' : level_name, - 'sell price chicken' : constants.DEFAULT_SELL_PRICE_CHICKEN, - 'sell price egg' : constants.DEFAULT_SELL_PRICE_EGG, - 'sell price dead fox' : constants.DEFAULT_SELL_PRICE_DEAD_FOX, - 'turn limit' : constants.DEFAULT_TURN_LIMIT, - 'goal' : constants.DEFAULT_GOAL_DESC, - 'max foxes' : constants.DEFAULT_MAX_FOXES, - 'min foxes' : 0, - 'starting cash' : constants.DEFAULT_STARTING_CASH, - } - # Add default fox weightings - for animal, prob in DEFAULT_FOX_WEIGHTINGS: - defaults[animal.CONFIG_NAME] = prob - config = RawConfigParser(defaults) - config.read(level_info) - # NB. This assumes the level file is correctly formatted. No provision - # is made for missing sections or incorrectly specified values. - # i.e. Things may blow up - map_file = config.get('Level', 'map') - self.map = data.filepath('levels/%s' % map_file) - self.level_name = config.get('Level', 'level name') - self.goal = config.get('Level', 'goal') - self.turn_limit = config.getint('Level', 'turn limit') - self.max_foxes = config.getint('Game values', 'max foxes') - self.min_foxes = config.getint('Game values', 'min foxes') - self.sell_price_chicken = config.getint('Game values', 'sell price chicken') - self.sell_price_egg = config.getint('Game values', 'sell price egg') - self.sell_price_dead_fox = config.getint('Game values', - 'sell price dead fox') - self.starting_cash = config.getint('Game values', 'starting cash') - self.fox_weightings = [] - for animal, _prob in DEFAULT_FOX_WEIGHTINGS: - self.fox_weightings.append((animal, config.getint('Fox probablities', - animal.CONFIG_NAME))) + def __init__(self, level_name): + default_map = '%s.tga' % level_name + level_info = data.filepath('levels/%s.conf' % level_name) + # Load the level info file + # setup defaults + defaults = { + 'map' : default_map, + 'level name' : level_name, + 'sell price chicken' : constants.DEFAULT_SELL_PRICE_CHICKEN, + 'sell price egg' : constants.DEFAULT_SELL_PRICE_EGG, + 'sell price dead fox' : constants.DEFAULT_SELL_PRICE_DEAD_FOX, + 'turn limit' : constants.DEFAULT_TURN_LIMIT, + 'goal' : constants.DEFAULT_GOAL_DESC, + 'max foxes' : constants.DEFAULT_MAX_FOXES, + 'min foxes' : 0, + 'starting cash' : constants.DEFAULT_STARTING_CASH, + } + # Add default fox weightings + for animal, prob in DEFAULT_FOX_WEIGHTINGS: + defaults[animal.CONFIG_NAME] = prob + config = RawConfigParser(defaults) + config.read(level_info) + # NB. This assumes the level file is correctly formatted. No provision + # is made for missing sections or incorrectly specified values. + # i.e. Things may blow up + map_file = config.get('Level', 'map') + self.map = data.filepath('levels/%s' % map_file) + self.level_name = config.get('Level', 'level name') + self.goal = config.get('Level', 'goal') + self.turn_limit = config.getint('Level', 'turn limit') + self.max_foxes = config.getint('Game values', 'max foxes') + self.min_foxes = config.getint('Game values', 'min foxes') + self.sell_price_chicken = config.getint('Game values', 'sell price chicken') + self.sell_price_egg = config.getint('Game values', 'sell price egg') + self.sell_price_dead_fox = config.getint('Game values', + 'sell price dead fox') + self.starting_cash = config.getint('Game values', 'starting cash') + self.fox_weightings = [] + for animal, _prob in DEFAULT_FOX_WEIGHTINGS: + self.fox_weightings.append((animal, config.getint('Fox probablities', + animal.CONFIG_NAME))) + + # Utility functions, so we can make things more flexible later + + def is_last_day(self, days): + """Check if we're the last day""" + return days == self.turn_limit + + def get_max_turns(self): + """Get the display string for the turn limit""" + if self.turn_limit > 0: + return self.turn_limit + else: + return '-' + + def is_game_over(self, gameboard): + """Check if the game is over""" + if gameboard.trees_left() == 0: + return True + if self.turn_limit > 0 and gameboard.days >= self.turn_limit: + return True + if len(gameboard.chickens) == 0: + return True +