X-Git-Url: https://git.ctpug.org.za/?a=blobdiff_plain;f=naja%2Fplayer.py;h=f502b640ffd94ddd999022931425e77248794141;hb=0cef06f581d48315a59a19ac06ca1d2be14cbb4c;hp=fa6e1e9f3b3edd39a7a20a109135c39ee1f9cd36;hpb=b28198fc51a256d3e1ac9d3f983aff05c6ace25a;p=naja.git diff --git a/naja/player.py b/naja/player.py index fa6e1e9..f502b64 100644 --- a/naja/player.py +++ b/naja/player.py @@ -21,16 +21,16 @@ class PlayerBits(object): # Operate on individual bits def check_bit(self, bit): - return bool(self.bits & bit) + return bool(self.bits & (1 << bit)) def set_bit(self, bit): - self.bits |= bit + self.bits |= (1 << bit) def clear_bit(self, bit): - self.bits &= (0xff ^ bit) + self.bits &= (0xff ^ (1 << bit)) def toggle_bit(self, bit): - self.bits ^= bit + self.bits ^= (1 << bit) # Operate on sets of bits @@ -69,26 +69,39 @@ class Player(object): 'position': list(self.position), } + def get_adjacent_position(self, direction): + x, y = self.position + if direction == BITS.NORTH and y > 0: + return (x, y - 1) + elif direction == BITS.SOUTH and y < 4: + return (x, y + 1) + elif direction == BITS.EAST and x < 4: + return (x + 1, y) + elif direction == BITS.WEST and x > 0: + return (x - 1, y) + else: + # Not a legal space. + return None + def move(self, direction): if not self.bits.check_bit(direction): return False - # TODO: Something cleaner than this. - x, y = self.position - if direction == BITS.NORTH: - if y > 0: - self.position = (x, y - 1) - return True - elif direction == BITS.SOUTH: - if y < 4: - self.position = (x, y + 1) - return True - elif direction == BITS.EAST: - if x < 4: - self.position = (x + 1, y) - return True - elif direction == BITS.WEST: - if x > 0: - self.position = (x - 1, y) - return True + new_position = self.get_adjacent_position(direction) + if new_position is not None: + self.position = new_position + return True + return False + def set_position(self, new_position): + if new_position in self.legal_moves(): + self.position = new_position + return True return False + + def legal_moves(self): + positions = [self.position] + for direction in [BITS.NORTH, BITS.SOUTH, BITS.EAST, BITS.WEST]: + position = self.get_adjacent_position(direction) + if position is not None and self.bits.check_bit(direction): + positions.append(position) + return positions