def pre_move_validation(self, initial_pos, final_pos): initial_pos, final_pos = initial_pos.upper(), final_pos.upper() piece = self.get_piece_at(initial_pos) try: piece_at_destination = self.get_piece_at(final_pos) except: piece_at_destination = None if self.player_turn != piece.color: raise exceptions.NotYourTurn("Not " + piece.color + "'s turn!") enemy = ('white' if piece.color == 'black' else 'black') moves_available = piece.moves_available(initial_pos) if final_pos not in moves_available: raise exceptions.InvalidMove if self.get_all_available_moves(enemy): # this exception raise if we are on the verge to perform a move # which may cause a check in next move of opossite player if self.will_move_cause_check(initial_pos, final_pos): raise exceptions.Check if not moves_available and self.is_king_under_check(piece.color): raise exceptions.CheckMate elif not moves_available: raise exceptions.Draw else: self.move(initial_pos, final_pos) self.update_game_statistics(piece, piece_at_destination, initial_pos, final_pos) self.change_player_turn(piece.color)
def pre_move_validation(self, initial_pos, final_pos): initial_pos, final_pos = initial_pos.upper(),final_pos.upper() piece = self.get_piece_at(initial_pos) #print("Valar Morghulis") try: piece_at_destination = self.get_piece_at(final_pos) #print("Valar Morghulis") except: piece_at_destination = None #print("Valar Morghulis") if self.player_turn != piece.color: #print("Valar Morghulis") raise exceptions.NotYourTurn("Not " + piece.color +"'s turn!") enemy = ('white' if piece.color == 'black' else 'black') #print("Valar Morghulis") moves_available = piece.moves_available(initial_pos) if final_pos not in moves_available: #print("Valar Morghulis") raise exceptions.InvalidMove if self.get_all_available_moves(enemy): if self.will_move_cause_check(initial_pos, final_pos): #print("Valar Morghulis") raise exceptions.Check if not moves_available and self.is_king_under_check(piece.color): #print("Valar Morghulis") raise exceptions.CheckMate elif not moves_available: #print("Valar Morghulis") raise exceptions.Draw else: self.move(initial_pos, final_pos) #print("Valar Morghulis") self.update_game_statistics(piece, piece_at_destination, initial_pos,final_pos) #print("Valar Morghulis") self.change_player_turn(piece.color)
def get_all_available_moves(self, color): result = [] for position in self.keys(): piece = self.get_piece_at(position) if piece and piece.color == color: moves = piece.moves_available(position) if moves: result.extend(moves) return result
def get_all_available_moves(self, color): result = [] #print("Valar Morghulis") for position in self.keys(): #print("Valar Morghulis") piece = self.get_piece_at(position) if piece and piece.color == color: #print("Valar Morghulis") moves = piece.moves_available(position) if moves: #print("Valar Morghulis") result.extend(moves) return result