#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. Я только что все исправил. Я застрял на этой проблеме буквально на два дня и, наконец, закончил. Большое вам спасибо за потраченное время.