![]() |
Определение мата в шахматах?
Подскажите пож как можно определить мат в шахматах? А то не могу придумать как это запрограммировать.
Дошел до того, что могу определять какие клетки под ударом, чтоб король туда не мог ходить. Могу сделать, чтоб каждый раз проверяло не находится ли король под ударом... Это все можно, но вопрос и проблема в том, что если например король под ударом и все позиции куда он может походить тоже под ударом.. Остается такая штука как.. Противник жертвует фигурой прикрывая короля и после этого у короля например открывается свободная клетка для хода... В общем, подскажите как кто видит как можно организовать мат для противника? Игра друг против друга, без "ИИ". Спаасибо заранее, а то мучаюсь уже долго с этой проблемой.. :( |
Ну вам по сути необходимо определить следующие необходимые и достаточные критерия мата:
1. Королю шах. 2. Все соседние клетки возле короля под ударом / заняты фигурами. 3. Нельзя снять фигуру, которая организует шах. То есть нельзя туда пойти фигурой. (в.т.ч королем) 4. Нельзя закрыться от шаха. Т.е. нельзя пойти на соответсвующую линию / диагональ. Этот случай отметается, если: 1). если линий/диагоналей несколько одновременно; 2). это конь или пешка; 3). одна линия/диагональ + конь. По реализации: 1. Опеределить клетки, которые нам интересны. Место короля, вокруг короля, линии/диагональ удара, фигура, организующая шах. 2. Можно ли осуществить ход какой-либо фигурой в интересные клетки (клетки вокруг короля рассмотреть только для короля). Если можно, то не мат. Вроде так. Может чего и упустил. |
Killer_13, проверять все возможные ходы всех фигур матуемого ( :unsure: ) короля. Если какой либо ход предотвращает бой короля, то тогда мата нет.
Цитата:
"у короля например открывается свободная клетка для хода" - это, простите, не ваше дело. Т.е. оценивать ситуацию вперед никто не просит. Вперед паровоза бежать не надо. Есть мат - отлично. Нет мата - болит голова у человека. В противном случае, если компьютер будет думать за человека даже на 1 ход, это будет ИИ. Это уже противоречит условиям Цитата:
|
Много полезной информации, нужно переварить...
Я почему еще задал вопрос.. Я не знаю как заканчивать игру.. Имеется ввиду например, проиграл такой-то игрок. А Такое нельзя писать исходя только из того, что король под ударом и ему некуда походить.. Цитата:
Спасибо, теперь есть почва для размышлений. :) |
Цитата:
Программой потом поделитесь? (желательно в исходниках, исключительно для личного пользования) |
Цитата:
Просто пока писалась локальная игра - код был читабельный, и менее более правильно запрограммирован - тоисть логика отделена от вьюва и так д.. Когда начал писать сетевой вариант началась каша.. как бы все работает.. но мне не нравится мой кашеварный код.. :( Сервер организовывал с помощью RPC. Но опять же чтоб моментально прослушивать ход или чат, таймер стучит серверу каждую секунду. Ну короч... много разного.. которое я бы имплементировал по другому, если было б время и... так д... |
Цитата:
Возможно его тут и "вылижут" до блеска. Я сам не такой большеголовый сишник (наверно у вас написано на С), как lxa85, Iska, .... и многие другие, Просто всегда есть интерес, каким образом складывается алгоритм у разных людей в окончательный, пусть и не доведёный до блеска эрзац |
Цитата:
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
|
yurfed, справедливости ради токмо, скажу, что я давно уже не C-шник — в том плане, что мои познания в С устарели лет на пятнадцать-двадцать как минимум. Я остановился в программировании на C где-то на рубеже «закат эры DOS/Windows 3.1». По повсеместному распространению C++ прочёл несколько книг, дабы хоть иметь некоторое представление о базовых принципах, писать же на нём и вовсе ничего не писал. С C# знаком и вовсе понаслышке.
Так что, мой нынешний уровень — худо-бедно могу прочесть не специфический код, понять о чём он, попытаться определить причину конкретного поведения приложения. Но не более. |
|
yurfed, я тебя тоже попрошу в приличном обществе не выражаться :) Я "паскалевик", в лучшем случае "дельфишник". Недавно писал "на коленке" код под бейсик. С++ я в лучшем случае - читаю, пытаюсь понять принцип работы.
Сишники у нас pav, ferget, Admiral, Delirium, Drongo. P.S. Главное чтобы они мне теперь "вычитку" не сделали :) Цитата:
Я тоже ожидал C++, не Java. С последней не успел подружиться. Будет повод :) |
Iska, lxa85, ну чё наехали :) Откуда я знаю кто из вас любит розовый, а кто голубой. Отстаньте противные, я не хотел этого :).
Просто первые имена на вскидку... |
Если вы не утратили интерес к исходникам, то напомните через недельки 3. К тому времени должен доработать..
|
Значит так, добился пока этого, прошу поправить если что пропустил...
1. Если 2 шаха, то мат! Тоисть если король атакован двумя фигурами и ему некуда бежать.(сделал). 2. Если шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру. Правильно? 3. Если фигуру нельзя побить и на пути нельзя ничего поставить и королю некуда бежать, то мат! Еще варианты к определению мата в дополнение? Мыслей уже много прочитал, теперь стараюсь отобразить в коде, какие еще ситуации?? Еще бы придумать как "пат" определять... Всем спасибо! |
Цитата:
Мат (шахматы) |
Цитата:
Играл я во времена 8088 CGA и DOSа с компом в шахматы. У получилось у меня загнать эту электронную башку в мат. Только кремниевоголовый нимало не смутился, что его королю мат, и сделал ответный ход. Я сожрал ему короля :) Комп продолжил играть без этой никчемной фигуры, а у меня стали внезапно пропадать фигуры с доски - похоже, призрак короля их ел :lol: |
Пока что остается реализовать только этот пункт, все остальное готово...
Цитата:
Цитата:
Цитата:
|
Killer_13, а элементарно, условие на битое поле нет возможности пойти королём ни как?
|
Цитата:
Цитата:
1: e4, f6. 2: Ф h5+ По твоей версии - мат. Шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру. По моей версии - g6. Прикрыта она, не прикрыта - дело пятое. Я могу вскрыть линию жертвуя фигурой. |
Время: 03:45. |
Время: 03:45.
© OSzone.net 2001-