X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fplayer.py;h=d47e82682cce298a57424eaae1918d3f100e9615;hb=HEAD;hp=fc95a8fa55f66990d2116782d2e836c3af1429cf;hpb=7c77f569ca3cf1db9359ee476b245a848d7dddda;p=naja.git diff --git a/naja/player.py b/naja/player.py index fc95a8f..d47e826 100644 --- a/naja/player.py +++ b/naja/player.py @@ -63,17 +63,19 @@ class Player(object): A representation of the player. """ - def __init__(self, bits, position, movement_mode=None): + def __init__(self, bits, position, movement_mode=None, gameboard=None): self.bits = PlayerBits(bits) self.position = position self.movement_mode = movement_mode if movement_mode else MOVES.ADJACENT + self.gameboard = gameboard @classmethod - def import_player(cls, definition): + def import_player(cls, definition, gameboard=None): return cls( definition['bits'], tuple(definition['position']), - definition['movement_mode']) + definition['movement_mode'], + gameboard=gameboard) def export(self): return { @@ -149,6 +151,26 @@ class Player(object): return True return False + def force_position(self, pos, delta=True): + if delta: + pos = (self.position[0] + pos[0], + self.position[1] + pos[1]) + if (0 <= pos[0] < 5 and 0 <= pos[1] < 5): + self.position = pos + + def set_gameboard(self, gameboard): + self.gameboard = gameboard + + def pos_has_action(self, pos): + card = self.gameboard.board_locations[pos] + for action in card.actions: + if self.bits.check_bits(action.required_bits): + return True + return False + + def filter_moves_with_no_actions(self, positions): + return [pos for pos in positions if self.pos_has_action(pos)] + def legal_moves(self): POSITION_FUNCTION = { MOVES.ADJACENT: self.get_adjacent_positions, @@ -156,7 +178,8 @@ class Player(object): MOVES.BISHOP: self.get_bishop_positions, MOVES.CASTLE: self.get_castle_positions, } - return POSITION_FUNCTION[self.movement_mode]() + positions = POSITION_FUNCTION[self.movement_mode]() + return self.filter_moves_with_no_actions(positions) def allow_chess_move(self, chesspiece): self.movement_mode = chesspiece