Как стать автором
Обновить

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

Спасибо за поправку, не знал. Но я боюсь, что если функция будет называться check_check, то смысл будет понятен ещё меньше

Возьмите как аналог следующую свою функцию

def checkmate_stalemate(B_W)

А еще у вас не учтено правило 50 ходов.

И еще - недостаточно материала для мата :-)

Я в своем проекте делал что-то подобное, и пришел к выводу что нельзя рассматривать фигуры с отрывом от позиции на доске. Вы кстати на этом же попались когда делали рокировку и взятие на проходе. В итоге (сугубо мое мнение) получилось некрасиво - помесь одного с другим. Т.е. Вы сначала делаете проверку на возможность хода фигуры, потом выделяете короля в отдельную сущность, потом выделяете пешку в отдельную сущность и... Вот это и некрасиво.

Далее. Вы проверяете только пат. Но в шахматах есть кроме пата еще правила на ничью - трехкратное повторение позиции, недостаточно материала для мата, правило 50 ходов. И если последнее правило Вы можете обойти если не пишите партию, то два остальных как обойти? Это полноценные правила которые Вы игнорируете, а ведь они эквивалентны пату.

Еще про рокировку. Либо я недоглядел, но где проверка того ходила фигура или нет? Ведь это тоже запрет рокировки.

Из рекомендаций. Я бы посоветовал хранить FEN позицию, тогда проверка возможности рокировки и взятие на проходе упрощается резко и в разы.

Да, рокировка и взятие на проходе, действительно, оформлены не очень красиво, признаю.
На счёт условий для ничьи Вы правы. Я поленился их добавлять, расчитывая на то, что игроки договорятся сами
А на счёт условия для рокировки о котором Вы написали, оно есть. У каждой фигуры есть параметр already_moved. Он проверяется для ладьи и короля.
А так, спасибо за критику, попытаюсь добавить то, о чём вы написали когда появятся силы.

Легче сразу работать по FEN-записи на самом деле. Я у себя ее просто загружаю и разбираю по свойствам внутри объекта "Шахматная доска". Просто нельзя рассматривать фигуры в отрыве от доски, это единое целое именно из-за рокировки и взятия на проходе, увы. И всякие примеры типа "наследования" в шахматной реальности не работают :-) потому что без доски - толку ноль.

Кстати, если хотите увидеть интересный код, посмотрите реализацию cm-chessboard на js.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации