X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fgameboard.py;h=0c0d922c959899cf809b45ca483e9137ffe5f763;hb=5c6d74c07c8e1a05579c2ce85895d512fd6cdd40;hp=934aa3d15b1d308cb12d59d37e6e5d1645a0deae;hpb=504157042ced1fab2fe66a906129ca87fdf91297;p=naja.git diff --git a/naja/gameboard.py b/naja/gameboard.py index 934aa3d..0c0d922 100644 --- a/naja/gameboard.py +++ b/naja/gameboard.py @@ -2,7 +2,7 @@ from random import choice from naja.constants import( BITS, DIRECTION_BITS, CONDITION_BITS, PLAYER_DEFAULTS, - ACT, EXAMINE, ROTATION) + ROTATION) from naja.options import options from naja.player import Player from naja import actions @@ -25,7 +25,6 @@ class GameBoard(object): self.puzzle = state.get('puzzle', False) self.player = player self.board_locations = board_locations - self.player_mode = state.get('player_mode', EXAMINE) self.has_cheated = state.get('cheater', options.cheat_enabled) self.clock_count = state.get('clock_count', 0) self.replacement_params = state.get('replacement_params', None) @@ -41,14 +40,11 @@ class GameBoard(object): 'wins_required': PLAYER_DEFAULTS.WINS_REQUIRED, } - puzzle = deck.get('puzzle', False) - - if puzzle: - puzzle_defaults = deck.get('defaults', {}) - for k, v in puzzle_defaults.iteritems(): - if isinstance(v, list): - puzzle_defaults[k] = tuple(v) - defaults.update(puzzle_defaults) + deck_defaults = deck.get('defaults', {}) + for k, v in deck_defaults.iteritems(): + if isinstance(v, list): + deck_defaults[k] = tuple(v) + defaults.update(deck_defaults) if initial_bits is None: initial_bits = defaults['initial_bits'] @@ -59,6 +55,8 @@ class GameBoard(object): if wins_required is None: wins_required = defaults['wins_required'] + assert wins_required + max_health == 8 + # Overriden by command line if options.initial_bits: initial_bits = options.initial_bits @@ -69,7 +67,7 @@ class GameBoard(object): 'wins_required': wins_required, 'wins': 0, 'locations': deck['cards'], - 'puzzle': puzzle, + 'puzzle': deck.get('puzzle', False), 'clock_count': 0, 'replacement_params': deck.get('replacement_params', None), } @@ -100,7 +98,6 @@ class GameBoard(object): 'puzzle': self.puzzle, 'player': self.player.export(), 'board_locations': self.export_board_locations(), - 'player_mode': self.player_mode, 'clock_count': self.clock_count, 'replacement_params': self.replacement_params, } @@ -189,7 +186,7 @@ class GameBoard(object): # Find which cards are at their maximum and exclude them from # the choice list counts = {} - choices = {card['card_name']: card for card in cards} + choices = dict((card['card_name'], card) for card in cards) for pos, card in board_locations: if pos == position: # skip the card we're replacing if appropriate @@ -207,30 +204,34 @@ class GameBoard(object): del choices[key] return choice(choices.values()) - def shift_location_row(self, change, is_vertical): + def shift_location_row(self, change, is_vertical, skip_player=True): px, py = self.player.position shifted_locations = {} mkpos = lambda i: (px, i) if is_vertical else (i, py) for i in range(5): - if (px, py) == mkpos(i): + if skip_player and (px, py) == mkpos(i): continue new_i = (i + change) % 5 - if (px, py) == mkpos(new_i): + if skip_player and (px, py) == mkpos(new_i): new_i = (new_i + change) % 5 shifted_locations[mkpos(new_i)] = self.board_locations[mkpos(i)] self.board_locations.update(shifted_locations) - def shift_locations(self, direction): + def shift_locations(self, direction, skip_player=True): if BITS[direction] == BITS.NORTH: - self.shift_location_row(-1, is_vertical=True) + self.shift_location_row(-1, is_vertical=True, + skip_player=skip_player) elif BITS[direction] == BITS.SOUTH: - self.shift_location_row(1, is_vertical=True) + self.shift_location_row(1, is_vertical=True, + skip_player=skip_player) elif BITS[direction] == BITS.EAST: - self.shift_location_row(1, is_vertical=False) + self.shift_location_row(1, is_vertical=False, + skip_player=skip_player) elif BITS[direction] == BITS.WEST: - self.shift_location_row(-1, is_vertical=False) + self.shift_location_row(-1, is_vertical=False, + skip_player=skip_player) def rotate_locations(self, direction): px, py = self.player.position @@ -265,18 +266,6 @@ class GameBoard(object): def allow_chess_move(self, chesspiece): self.player.allow_chess_move(chesspiece) - def change_mode(self, new_mode): - """Advance to the next mode""" - if new_mode == self.player_mode: - raise RuntimeError("Inconsistent state. Setting mode %s to itself" - % self.player_mode) - elif new_mode in (ACT, EXAMINE): - self.player_mode = new_mode - if new_mode is EXAMINE: - self.board_update() - else: - raise RuntimeError("Illegal player mode %s" % self.player_mode) - def board_update(self): self.clock_count += 1 for position, location in self.board_locations.iteritems(): @@ -306,6 +295,9 @@ class LocationCard(object): self.actions = location_actions self.max_number = max_number self.replacement_time = replacement_time + if options.debug: + for action in self.actions: + action.sanity_check(self) @classmethod def import_location(cls, state):