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