Example #1
0
 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)
Example #2
0
 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)
Example #3
0
 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
Example #4
0
 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