На этом уроке мы реализуем алгоритм взятия на проходе. Для этого мы доработаем ранее созданную заглушку is_pawn_passant(). Добавим вспомогательные переменные для хранения координат возможного взятия на проходе, они нам пригодится на следующем уроке.
Дата отправки отчёта:
22 января 2017 г.
Задание выполнено: за
59 мин.
Чему научился:
Дoрaбатывать функцию is_pawn_passant().
Что было сложным:
ене было сложностей
Комментарии:
Из приведенного скриншота видно, что алгоритм явно не дороботан. Ниже предлагается мой варант алгоритма для белых:
Если пешка не стоит на 4-горизонтали то возвращаем false. Если последний ход соперника был сделан не пешкой то возвращаем false. Если ход соперника был сделан не с 6-горизонтали на 4-ю? то возвращаем false. Если пешка соперника не на соседней соседней вертикали то возвращаем false. при овсобождении своей пешки открывается шах своему королю то возвращаем false. иначе возвращаем true.
Научился: pawn_attack_x && pawn_attack_y предположительно должны устанавливаться для каждой пешки, которая предприняла ход на две клетки
Только в этом случае актуально взятие на проходе и в случае хода на две клетки целесообразно отслеживать, а не вздумает ли кто срубить пешечку en passant
Научился: Прорабатывали "взятие на проходе". Думаю, ещё нужно прописать в необходимых условиях соответствующие действия "Тёмной Стороны" )))
Мы можем бить поле, через которое перескочила пешка противника. Т.к. это может быть только на одной линии, то и в условиях можно указать эту линию "-1" для стартовой позиции хода пешки, т.е. в нашем случае (с белыми): "4".
Т.к. пешка идёт по диагонали, то и смещение по иксу должно быть на единицу.
"Поле атаки" по иксу всегда "5" (шестая линия в массиве), а по игреку совпадает с "dy" атакуемой вражеской пешки.