Определение мата в шахматах?
Дошел до того, что могу определять какие клетки под ударом, чтоб король туда не мог ходить.
Могу сделать, чтоб каждый раз проверяло не находится ли король под ударом... Это все можно, но вопрос и проблема в том, что если например король под ударом и все позиции куда он может походить тоже под ударом..
Остается такая штука как.. Противник жертвует фигурой прикрывая короля и после этого у короля например открывается свободная клетка для хода...
В общем, подскажите как кто видит как можно организовать мат для противника? Игра друг против друга, без "ИИ".
Спаасибо заранее, а то мучаюсь уже долго с этой проблемой.. :(
для шахов и соотвественно мата все равно надо будет выполнять отдельный пересчет )) если не использовать БД для их узнавания.
поэтому (по крайней мере один из способов) перед выполнения просчета запускается процедура просчета шахов - потому как если шах - просчет ходов становится граздо менее объемным ))
Например когда вы определили что король под ударом, следующее что нужно определить не может ли он уйти(это как я понял не вызывает затруднений). Вот тут по идее если он может уйти всё равно по хорошему нужно проверить не может ли его перекрыть какая нибудь фигура.
Вот теперь начинается самое интересное, когда король ходить не может.
Вам нужно определить не от коня ли угроза, если это так и мы не можем его рубить то пипец. На возможность сруба должна быть стандартная заготовка. Далее нужно определить есть ли клетки между королём и угрожающей фигурой, если нет и мы не можем её рубить то пипец. Дальше нужно записать в массив все координаты клеток начиная от короля до угрожающей фигуры(или наоборот), и проверить не может ли одна из ваших фигур встать на любую координату из массива(при этом не забыть проверить не становится ли другая фигура противника угрожающей). Ну это упрощенный алгоритм, а если по хорошему вам нужно выбрать фигуру перекрывающую короля с учётом того может ли она встать в место где будет защищена, либо разблокировать короля. Иначе это превращается в автобой.
Пока ничего проще в голову не приходит, может ещё кто что посоветует.
Про процедуру мата и спрашивают, а вы пишите примените процедуру мата.
Я попадал в такую ситуацию, когда например мне ставили шах ладьёй и в то же время открывался офицер бьющий по моему королю. В такой ситуации как вы понимаете бессмыслено искать фигуру для перекрытия. Здесь сразу нужно проверять может ли король ходить, если нет то пипец.
В этом случае не запускается механизм поиска фигуры для перекрытия, и выбора из всех найденых фигуры с защитой или которая разблокирует короля. сразу проверяется может ли король уйти.
Я же не говорю что этот вариант единственно верный и важный, всё зависит от требований ко времени просчёта, размеру кода и его сложности.
Вообще лучше бы автор что нибудь написал, годится ему так или нужно чтото другое придумать.
Или вообще проблема решена и он не нуждается в решении.
Да, нуждаюсь, но как только начинаю думать, вот-так и так, то вылазит, а еще это нужно учесть, а еще так и... я чуток запутался.
Тем не менее вы меня навели на несколько интересных мыслей..
Про процедуру мата и спрашивают, а вы пишите примените процедуру мата.
шахматный мат - это наличие угрозы королю (т.е. первоначально надо проверить есть ли шах), и только при наличии угрозы надо запускать просчет (не)возможности этой угрозы избежать (мат).
Поэтому я и пишу вполне конкретно - определять мат в шахматах надо только тогда, когда существует угроза королю.
Что не верно?
"необходимо реализовать процедуру на проверку шаха и если она отрабатывает с положительным результатом - вызывается процедура просчета мата." - Это ваш ответ.
Если присмотреться к вашему ответу то из него ровным счётом ничего не следует кроме того что процедур две, и что они вызываются в определённом порядке. Но этоо ответ на какой то другой вопрос, только не на этот.
Я предложил реализовать одну процедуру на проверку мата. Если она отрабатывает с результатом TRUE значит это мат, В противном случае был всего лиш шах.
Мы говорим о разных вещах, я говорю про мат, как и спрашивал вопрошающий. А процедура определения шаха по любому должна быть, нет смысла проверять на мат если королю не угрожают. Но вопрошающий не спрашивал про определение шаха, я понимаю с этим нет проблем.
да ты гений парниша. ты в состоянии пересказать своими словами то, что я написал в первом ответе три дня назад. Потому что я тоже предложил реализовать ОДНУ процедуру по определению мата. Не две, ни три - ОДНУ. И одну, которая проверяет под ударом ли король.
Молодец, возьми с полки пирожок. буквы на клавиатуре ты уже освоил. Теперь научись понимать написанное.
В первом ответе уже всё подробно расписали.
да ты гений парниша. ты в состоянии пересказать своими словами то, что я написал в первом ответе три дня назад. Потому что я тоже предложил реализовать ОДНУ процедуру по определению мата. Не две, ни три - ОДНУ. И одну, которая проверяет под ударом ли король.
Молодец, возьми с полки пирожок. буквы на клавиатуре ты уже освоил. Теперь научись понимать написанное.
Вот ты и должен был написать своими словами что ты там предполагал