Перемещение фигур в соответствии с шахматными правилами, когда король находится под контролем

#python #chess

Вопрос:

Эта функция используется для проверки входных данных и для обеспечения того, чтобы перемещения были законными. Я пытался помешать фигурам делать какие-либо ходы, которые не помогают королю, когда он находится под контролем, но моя главная проблема здесь в том, что фигуры могут делать любые ходы, даже если король находится под контролем. Я думаю, что проблема может заключаться в последних 27 строках, но вот мой полный код, если вы хотите его увидеть: https://pastebin.com/wQx9pHNE. Большое вам спасибо за потраченное время!

 def good_baton(self, turn):
    check_white, check_black = False, False
    while True:
        coords = input('Please enter the piece's starting position and its ending position in the following syntax: D2 D4. ')
        result = self.syntax_validation(coords)
        # print(result)
        if result:
            starting_coords, ending_coords = result
        else:
            print('Invalid syntax')
            continue
        result = self.coordinates_validation(starting_coords, ending_coords)
        print('coordinates_validation result = ', result)
        if result:
            piece, starting_coords, ending_coords = result
        else:
            print('Invalid input')
            continue
        if piece.side != turn:
            print('This isn't your turn')
            continue
        if not isinstance(piece, Knight):
            result = piece.move_validation(self, ending_coords)
        else:
            result = piece.move_validation(ending_coords)
    
        if not result:
            print('Incorrect move')
            continue
        if result != 'really true':
            result = self.moving_pieces(ending_coords, piece)
        if not result:
            print('Invalid move')
            continue
        is_check = self.white_king.check_baton(self)
        if any(is_check):
            print('check')
            check_white = True
        else:
            check_white = False
        is_check = self.black_king.check_baton(self)
        if any(is_check):
            print('check')
            check_black = True
        else:
            check_black = False
        
        if check_white == True and turn == 'white':
            print('Invalid move, please prioritize the safety of your king to win')
            self.moving_pieces(starting_coords, piece)
            print(piece.initial_coords)
            continue
        if check_black == True and turn == 'black':
            print('Invalid move, please prioritize the safety of your king to win')
            self.moving_pieces(starting_coords, piece)
            print(piece.initial_coords)
            continue
        print('Valid input')
        piece.initial_coords = ending_coords
        self.display()
        break
 

Комментарии:

1. Пожалуйста, прочтите ericlippert.com/2014/03/05/how-to-debug-small-programs . Здесь уже есть много кода, но проблема очень легко может быть в одной из многих вызываемых вами вспомогательных функций, которые вы нам не показали. Также неясно, откуда вы знаете, что у вас «есть ошибки в этом разделе».

2. Я действительно думал о том, чтобы включить сюда другие функции, но вместо этого решил отправить ссылку на pastebin, потому что добавление их сюда сделало бы код длиной не менее 250 строк. Я постараюсь исправить свой вопрос и улучшить его. Пожалуйста, дай мне секунду

3. Пожалуйста, сначала, по крайней мере, попробуйте самостоятельно найти проблему.

4. Я только что все исправил. Я застрял на этой проблеме буквально на два дня и, наконец, закончил. Большое вам спасибо за потраченное время.