def test_is_pawn(self): expected = True for col in utils.COLUMN_NAMES: actual = cm.is_pawn(col +'1') self.assertEqual(expected, actual) actual = cm.is_pawn(col + 'x1d') self.assertEqual(expected, actual) expected = False actual = cm.is_pawn('B1') self.assertEqual(expected, actual) expected = False actual = cm.is_pawn('Kx1') self.assertEqual(expected, actual)
def parse_coordinates(input_move): if cm.is_pawn(input_move): move_to_col, move_to_line, col_filter, line_filter = parse_pawn_coordinates(input_move) elif cm.is_main_piece(input_move): move_to_col, move_to_line, col_filter, line_filter = parse_main_pieces_coordinates(input_move) else: move_to_col, move_to_line = None, None col_filter, line_filter = None, None return move_to_col, move_to_line, col_filter, line_filter
def validate_move_case(input_move): if cm.is_pawn(input_move): return len(input_move) == 2 and input_move[1] in utils.LINE_NAMES if (not cm.is_main_piece(input_move) )or \ not are_coordinates_valid(input_move[-2], input_move[-1]): return False return ( len(input_move) == 3 or ( input_move[1] in utils.COLUMN_NAMES+ utils.LINE_NAMES and len(input_move) == 4 ) or ( are_coordinates_valid(input_move[1], input_move[2]) and len(input_move) == 5 ) )
def validate_eat_case(input_move): if len(input_move) < 4 or \ input_move[-3] != 'x' or \ (not are_coordinates_valid(input_move[-2], input_move[-1])): return False return ( ( len(input_move) == 4 and (cm.is_pawn(input_move) or cm.is_main_piece(input_move)) ) or ( len(input_move) == 5 and ( cm.is_main_piece(input_move)) and ( input_move[1] in utils.COLUMN_NAMES + utils.LINE_NAMES ) ) or ( len(input_move) == 6 and ( cm.is_main_piece(input_move)) and ( are_coordinates_valid(input_move[1], input_move[2]) ) ) )
def input_to_kind(input_move): kind = None if cm.is_any_piece(input_move): if cm.is_pawn(input_move): kind = 'p' elif cm.is_bishop(input_move): kind = 'b' elif cm.is_knight(input_move): kind = 'n' elif cm.is_rook(input_move): kind = 'r' elif cm.is_king(input_move): kind = 'k' elif cm.is_queen(input_move): kind = 'q' return kind
def is_user_move_valid(input_move): if len(input_move) <= 1: print 'wrong input try again' return False if cm.is_check(input_move): print "CHECK" input_move = input_move[:-1] if cm.is_castling(input_move): return True if cm.is_special_case(input_move): return True if not cm.is_pawn(input_move) and not cm.is_main_piece(input_move): print 'case not valid, not a chess piece' return False if validate_eat_case(input_move): print 'valid eat input' return True if validate_move_case(input_move): print 'valid move input' return True promotion,input_move,promoted_to = cm.is_promotion(input_move) if promotion: if not is_valid_promotion(input_move,promoted_to): return False else: return True print 'wrong input, try again' return False
def print_move(self, input_move, move_to_col, move_to_line): out_str = "" if cm.is_short_castling(input_move): out_str = "Short castling for %s" % self.player elif cm.is_long_castling(input_move): out_str = "long castling for %s" % self.player elif cm.is_pawn(input_move): out_str = "Move %s pawn" % self.player elif cm.is_bishop(input_move): out_str = "Move %s bishop" % self.player elif cm.is_knight(input_move): out_str = "Move %s knight" % self.player elif cm.is_rook(input_move): out_str = "Move %s rook" % self.player elif cm.is_king(input_move): out_str = "Move %s king" % self.player elif cm.is_queen(input_move): out_str = "Move %s queen" % self.player else: out_str = "not supported move. Merry Xmas" if not cm.is_castling(input_move): if input_parser.piece_eats(input_move): out_str = out_str + " and capture piece at (%s,%s)" % (move_to_col,move_to_line) else: out_str = out_str + " to (%s,%s)" % (move_to_col, move_to_line) print("Your move is : " + input_move + '. ' + out_str)