X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fplayer.py;h=892fa05b32f88c117a59f98d6025a7b0821a5469;hb=90cf8e0e0006bd9258f6100fcdf2312363543815;hp=b471c625135d4aea0d58af975a86e0a59e81c2a8;hpb=653d96206e72f07934d6d562e2680ee8b3fb7db9;p=naja.git diff --git a/naja/player.py b/naja/player.py index b471c62..892fa05 100644 --- a/naja/player.py +++ b/naja/player.py @@ -50,10 +50,12 @@ class PlayerBits(object): self.toggle_bit(bit) def shift_bits_left(self, shift): - self.bits <<= shift + wrap = self.bits >> (8 - shift) + self.bits = (self.bits << shift & 0xff | wrap) def shift_bits_right(self, shift): - self.bits >>= shift + wrap = self.bits << (8 - shift) & 0xff + self.bits = (self.bits >> shift | wrap) class Player(object): @@ -61,10 +63,11 @@ 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): @@ -147,6 +150,19 @@ class Player(object): return True return False + 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, @@ -154,7 +170,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