Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
(pre ; Предварительные действия (для любого из определённых (двух) ходов
(check is-friend?) ; На текущей клетке дружественная фигура?
(take) ; Взять её в руку
(log position) ; Отметить начальную позицию (для нотации хода)
(let captured 0) ; Определяем переменную - счётчик взятых фигур
)
(post ; Завершающие действия для любого из ходов
(check (<= max-captured captured)) ; Взято фигур не меньше глобального счётчика?
(set! max-captured captured) ; Обновить глобальный счётчик
(log " - " position) ; Отметить конечную позицию (для нотации хода)
(drop) ; Поместить фигуру на доску
)
(move ; Тихий ход
(check (any nw ne)) ; Двигаемся на северо-запад или северо-восток (если возможно)
(check is-empty?) ; Позиция пуста?
)
(move ; Бой фигур
(while true ; Повторять в цикле
(let dir (any nw ne sw se)) ; Выбираем одно из 4 направлений
(check dir) ; Двигаемся в выбранном направлении (если это возможно)
(check is-enemy?) ; Вражеская фигура?
(capture) ; Берём её (можно ещё и отметить промежуточную позицию командой log)
(inc! captured) ; Увеличиваем счётчик взятых фигур
(check dir) ; Продолжаем двигаться в том же направлении (если это возможно)
(check is-empty?) ; Пустая клетка?
(end-move) ; В этом месте ход может быть завершён
)
)
(game
(name chess-game)
(loss
(exists?
(any King)
(if is-friend?
(check is-attacked?)
)
(check no-moves?)
)
)
)
(if is-friend?
(check is-attacked?)
)
(check no-moves?)
(check is-friend?)
(check is-attacked?)
(check no-moves?)
(loss
(check no-moves?)
(check (exists?
(any King)
(if is-friend?
(check is-attacked?)
)
))
)
Dagaz: На полпути