Pull to refresh

Comments 8

Спасибо. Хороший мануал "ab ovo"/ Go для меня излишен, но сам принцип разбора мне понравился.

Спасибо! Рад, что вам понравилось)

Сильно ли отличаются реализации взятия, рокировки, взятия на проходе и превращения пешки в другую фигуру?

Со взятием просто. Есть поле "откуда" с ходящей фигурой и поле "куда" с фигурой съедаемой. Подробнее об этом будет в следующих частях, но пока скажу, что у доски к каждому полю привязана конкретная фигура. Соответственно, при взятии, надо удалить у поля ''откуда" фигуру и заменить ею фигуру поля "куда".

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

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

Спасибо за статью, очень интересно и жду следующую часть!

Спасибо! Постараюсь опубликовать её как можно скорее)

Из статьи не очень понятно, каким образом у Вас реализована рокировка? Через полный перебор истории или через какой-то кумулятивный флаг was_moved ? И каким образом хранится эта история? Как слепок доски, как стек положений фигур или еще как-то иначе?

Через флаг. Сохраняются и история ходов, и доска конкретной игры, и состояние самой игры. Информация о рокировке сохраняется в состоянии игры, обращаться к истории ходов или доске для этого не нужно. Разумеется, для анализа отдельного хода используется информация и о доске и состоянии игры. История ходов выступает больше как логирование, но и она нужна. Только не для рокировки, а для условий "50 ходов подряд без взятия фигуры" или "трижды повторившаяся позиция".

Sign up to leave a comment.

Articles