X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fgameboard.py;h=fa768dbad5db3481820d1775f277a2e37cb83d1c;hb=acfcd6aadbcc6c4ba91b4071fc70cb23a460987c;hp=9c5af7b3554382158c79df337742e605c6b819a7;hpb=ede149141d8dcbd6bed5bf3ff710d2f716ac8421;p=naja.git diff --git a/naja/gameboard.py b/naja/gameboard.py index 9c5af7b..fa768db 100644 --- a/naja/gameboard.py +++ b/naja/gameboard.py @@ -8,32 +8,52 @@ class GameBoard(object): A representation of the game board. """ - def __init__(self, player, health, wins, locations=None, state=None): + def __init__(self, player, health, wins, state=None): self.player = player - self.max_health = health - self.wins_required = wins - - if locations is None: - locations = self.generate_locations() - self.locations = locations if state is None: - state = self.generate_state() + state = self.generate_state(health, wins) self.update_state(state) + def export(self): + return { + 'max_health': self.max_health, + 'health': self.health, + 'wins_required': self.wins_required, + 'wins': self.wins, + 'locations': self.export_locations(), + } + + def export_locations(self): + return dict( + (position, location.export()) + for position, location in self.locations) + @classmethod def generate_locations(cls): - raise NotImplementedError("TODO") + # TODO: Generate some locations. + return {} - def generate_state(self): + def generate_state(self, max_health, wins_required): return { - 'health': self.max_health, + 'max_health': max_health, + 'health': max_health, + 'wins_required': wins_required, 'wins': 0, + 'locations': self.generate_locations(), } def update_state(self, state): + self.max_health = state['max_health'] + self.wins_required = state['wins_required'] self.health = state['health'] self.wins = state['wins'] + self.locations = self.import_locations(state['locations']) + + def import_locations(self, locations): + return dict( + (position, LocationCard.import_location(definition)) + for position, definition in locations.iteritems()) def lose_health(self): self.health -= 1 @@ -49,8 +69,26 @@ class LocationCard(object): self.bitwise_operand = bitwise_operand self.actions = actions - @staticmethod - def generate_location(): + @classmethod + def import_location(cls, state): + # TODO: Import real locations. + return cls(state['bitwise_operand'], []) + + @classmethod + def new_location(cls, definition): + return cls.import_location({ + 'bitwise_operand': cls.generate_bitwise_operand(), + 'actions': cls.build_actions(definition), + }) + + def export(self): + return { + 'bitwise_operand': self.bitwise_operand, + 'actions': [action.export() for action in self.actions], + } + + @classmethod + def build_actions(cls, definition): raise NotImplementedError("TODO") @staticmethod @@ -68,32 +106,3 @@ class LocationCard(object): if choice(range(3)) == 0: bits.add(choice(BITS.values())) return frozenset(bits) - - @staticmethod - def generate_location_actions(): - raise NotImplementedError("TODO") - - -class LocationAction(object): - """ - An action that may be performed on a location. - """ - - TEXT = None - - def __init__(self, required_bits, **data): - self.required_bits = required_bits - self.data = data - - def check_available(self, player): - return player.bits.check_bits(self.required_bits) - - def perform_action(self, player, board): - raise NotImplementedError("TODO") - - def check_and_clear_MSB(self, player): - if player.bits.check_bit(BITS.MSB): - player.bits.clear_bit(BITS.MSB) - return True - else: - return False