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 Exception as e: piece_at_destination = None if self.player_turn != piece.color: raise exceptions.NotYourTurn("Not " + piece.color + "'s turn!") enemy = utils.get_enemy(piece.color) moves_available = piece.moves_available(initial_pos) if final_pos not in moves_available: raise exceptions.InvalidMove if self.get_all_available_moves(enemy): if self.will_move_cause_check(initial_pos, final_pos): raise exceptions.Check if len(moves_available) == 0 and self.is_king_under_check(piece.color): raise exceptions.CheckMate elif len(moves_available) == 0: 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) 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)