comparison 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
comparison
equal deleted inserted replaced
391:fd8da9241381 392:bb75979b58e6
4 import data 4 import data
5 from animal import DEFAULT_FOX_WEIGHTINGS 5 from animal import DEFAULT_FOX_WEIGHTINGS
6 from ConfigParser import RawConfigParser 6 from ConfigParser import RawConfigParser
7 7
8 class Level(object): 8 class Level(object):
9 """Container for level details""" 9 """Container for level details"""
10 10
11 def __init__(self, level_name): 11 def __init__(self, level_name):
12 default_map = '%s.tga' % level_name 12 default_map = '%s.tga' % level_name
13 level_info = data.filepath('levels/%s.conf' % level_name) 13 level_info = data.filepath('levels/%s.conf' % level_name)
14 # Load the level info file 14 # Load the level info file
15 # setup defaults 15 # setup defaults
16 defaults = { 16 defaults = {
17 'map' : default_map, 17 'map' : default_map,
18 'level name' : level_name, 18 'level name' : level_name,
19 'sell price chicken' : constants.DEFAULT_SELL_PRICE_CHICKEN, 19 'sell price chicken' : constants.DEFAULT_SELL_PRICE_CHICKEN,
20 'sell price egg' : constants.DEFAULT_SELL_PRICE_EGG, 20 'sell price egg' : constants.DEFAULT_SELL_PRICE_EGG,
21 'sell price dead fox' : constants.DEFAULT_SELL_PRICE_DEAD_FOX, 21 'sell price dead fox' : constants.DEFAULT_SELL_PRICE_DEAD_FOX,
22 'turn limit' : constants.DEFAULT_TURN_LIMIT, 22 'turn limit' : constants.DEFAULT_TURN_LIMIT,
23 'goal' : constants.DEFAULT_GOAL_DESC, 23 'goal' : constants.DEFAULT_GOAL_DESC,
24 'max foxes' : constants.DEFAULT_MAX_FOXES, 24 'max foxes' : constants.DEFAULT_MAX_FOXES,
25 'min foxes' : 0, 25 'min foxes' : 0,
26 'starting cash' : constants.DEFAULT_STARTING_CASH, 26 'starting cash' : constants.DEFAULT_STARTING_CASH,
27 } 27 }
28 # Add default fox weightings 28 # Add default fox weightings
29 for animal, prob in DEFAULT_FOX_WEIGHTINGS: 29 for animal, prob in DEFAULT_FOX_WEIGHTINGS:
30 defaults[animal.CONFIG_NAME] = prob 30 defaults[animal.CONFIG_NAME] = prob
31 config = RawConfigParser(defaults) 31 config = RawConfigParser(defaults)
32 config.read(level_info) 32 config.read(level_info)
33 # NB. This assumes the level file is correctly formatted. No provision 33 # NB. This assumes the level file is correctly formatted. No provision
34 # is made for missing sections or incorrectly specified values. 34 # is made for missing sections or incorrectly specified values.
35 # i.e. Things may blow up 35 # i.e. Things may blow up
36 map_file = config.get('Level', 'map') 36 map_file = config.get('Level', 'map')
37 self.map = data.filepath('levels/%s' % map_file) 37 self.map = data.filepath('levels/%s' % map_file)
38 self.level_name = config.get('Level', 'level name') 38 self.level_name = config.get('Level', 'level name')
39 self.goal = config.get('Level', 'goal') 39 self.goal = config.get('Level', 'goal')
40 self.turn_limit = config.getint('Level', 'turn limit') 40 self.turn_limit = config.getint('Level', 'turn limit')
41 self.max_foxes = config.getint('Game values', 'max foxes') 41 self.max_foxes = config.getint('Game values', 'max foxes')
42 self.min_foxes = config.getint('Game values', 'min foxes') 42 self.min_foxes = config.getint('Game values', 'min foxes')
43 self.sell_price_chicken = config.getint('Game values', 'sell price chicken') 43 self.sell_price_chicken = config.getint('Game values', 'sell price chicken')
44 self.sell_price_egg = config.getint('Game values', 'sell price egg') 44 self.sell_price_egg = config.getint('Game values', 'sell price egg')
45 self.sell_price_dead_fox = config.getint('Game values', 45 self.sell_price_dead_fox = config.getint('Game values',
46 'sell price dead fox') 46 'sell price dead fox')
47 self.starting_cash = config.getint('Game values', 'starting cash') 47 self.starting_cash = config.getint('Game values', 'starting cash')
48 self.fox_weightings = [] 48 self.fox_weightings = []
49 for animal, _prob in DEFAULT_FOX_WEIGHTINGS: 49 for animal, _prob in DEFAULT_FOX_WEIGHTINGS:
50 self.fox_weightings.append((animal, config.getint('Fox probablities', 50 self.fox_weightings.append((animal, config.getint('Fox probablities',
51 animal.CONFIG_NAME))) 51 animal.CONFIG_NAME)))
52
53 # Utility functions, so we can make things more flexible later
54
55 def is_last_day(self, days):
56 """Check if we're the last day"""
57 return days == self.turn_limit
58
59 def get_max_turns(self):
60 """Get the display string for the turn limit"""
61 if self.turn_limit > 0:
62 return self.turn_limit
63 else:
64 return '-'
65
66 def is_game_over(self, gameboard):
67 """Check if the game is over"""
68 if gameboard.trees_left() == 0:
69 return True
70 if self.turn_limit > 0 and gameboard.days >= self.turn_limit:
71 return True
72 if len(gameboard.chickens) == 0:
73 return True
74