worm2 писал(а):
Но сложность, как мне кажется, в деталях. Отладка алгоритма перебора всех возможных ходов с учётом дамок и всех правил (…) --- возня малоприятная.
Ну, не без возни. Но в пару-тройку сотен строк уложиться можно. Главное, что легко структуризовать — отдельно поиск ходов, отдельно — перебор, отдельно — оценка. Есть и трюк, упрощающий жизнь: многошаговое взятие можно считать как последовательность одношаговых с нулевой (или очень маленькой) ценой дополнительных ходов.
worm2 писал(а):
насколько я знаю, есть такое правило: из всех ходов игрок обязан выбрать тот, при котором забирается больше всего шашек
В русских шашках такого правила нет, в 100-клеточных — есть. Но мы, вроде, про русские. (В американском аналоге — dsraughts — еще более странные правила. Например, дамка ходит только на одну клетку. Но в них я не разбирался). С дамками хитрее: дамка обязана взять всю цепочку, но не обязательно самую длинную цепочку.
Capella писал(а):
Kстати, вот ещё один вариант - BackTracking!
Предложенный алгоритм и есть по сути перебор с возвратами. Правда, к нему добавлена (как возможность) отсечение ветвей.
Sunrise_kitten писал(а):
А можно попонятнее, я не все поняла ((
Идея состоит в написании рекурсивной процедуры перебора с примерно таким интерфейсом:
function HalfStep(whites: bool, availableDepth: int): intесли
availableDepth <= 0, то функция возвращает оценку позиции (тут надо быть внимательным, оценка позиции за белых, или за черных)
Если же
availableDepth положительна, перебирает все возможные ходы и вызывает себя рекурсивно.
Дальнейшее — детали реализации. Их много, но я не могу предсказать, каким путем Вы пойдете, какое представление данных изберете, и потому не могу подсказать подводные камни. Но все это вполне проходимо, за недельку можно справиться.
Спрашивайте, будем рады помочь. Но, как и говорили — помочь, а не написать за Вас.
Добавлено спустя 7 минут 57 секунд:Sunrise_kitten писал(а):
может не нужно рассматривать все-все ходы...
Все-все ходы рассматривать проще, чем каким-то образом выделять не все.