Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Определение мата в шахматах? (http://forum.oszone.net/showthread.php?t=235456)

Killer_13 27-05-2012 13:58 1923346

Определение мата в шахматах?
 
Подскажите пож как можно определить мат в шахматах? А то не могу придумать как это запрограммировать.
Дошел до того, что могу определять какие клетки под ударом, чтоб король туда не мог ходить.
Могу сделать, чтоб каждый раз проверяло не находится ли король под ударом... Это все можно, но вопрос и проблема в том, что если например король под ударом и все позиции куда он может походить тоже под ударом..
Остается такая штука как.. Противник жертвует фигурой прикрывая короля и после этого у короля например открывается свободная клетка для хода...

В общем, подскажите как кто видит как можно организовать мат для противника? Игра друг против друга, без "ИИ".

Спаасибо заранее, а то мучаюсь уже долго с этой проблемой.. :(

PhilB 27-05-2012 14:24 1923363

Ну вам по сути необходимо определить следующие необходимые и достаточные критерия мата:
1. Королю шах.
2. Все соседние клетки возле короля под ударом / заняты фигурами.
3. Нельзя снять фигуру, которая организует шах. То есть нельзя туда пойти фигурой. (в.т.ч королем)
4. Нельзя закрыться от шаха. Т.е. нельзя пойти на соответсвующую линию / диагональ. Этот случай отметается, если:
1). если линий/диагоналей несколько одновременно;
2). это конь или пешка;
3). одна линия/диагональ + конь.
По реализации:
1. Опеределить клетки, которые нам интересны. Место короля, вокруг короля, линии/диагональ удара, фигура, организующая шах.
2. Можно ли осуществить ход какой-либо фигурой в интересные клетки (клетки вокруг короля рассмотреть только для короля). Если можно, то не мат.
Вроде так. Может чего и упустил.

lxa85 27-05-2012 14:26 1923366

Killer_13, проверять все возможные ходы всех фигур матуемого ( :unsure: ) короля. Если какой либо ход предотвращает бой короля, то тогда мата нет.
Цитата:

Цитата Killer_13
Противник жертвует фигурой прикрывая короля и после этого у короля например открывается свободная клетка для хода... »

"Противник жертвует фигуру, прикрывая короля ИЛИ атакует фигуру объявившую шах" - это можно.
"у короля например открывается свободная клетка для хода" - это, простите, не ваше дело.
Т.е. оценивать ситуацию вперед никто не просит. Вперед паровоза бежать не надо.
Есть мат - отлично. Нет мата - болит голова у человека.
В противном случае, если компьютер будет думать за человека даже на 1 ход, это будет ИИ. Это уже противоречит условиям
Цитата:

Цитата Killer_13
Игра без "ИИ". »

Т.е. еще раз. Смотрим все ходы, всех фигур, которые могут ходить (не открывая короля под бой), атаковать фигуру объявившую шах или закрывать короля + ходы короля, на безопасные клетки. Все, больше ничего не требуется. Никаких "думалок" вперед и пр.

Killer_13 27-05-2012 14:41 1923371

Много полезной информации, нужно переварить...
Я почему еще задал вопрос.. Я не знаю как заканчивать игру..
Имеется ввиду например, проиграл такой-то игрок. А Такое нельзя писать исходя только из того, что король под ударом и ему некуда походить..

Цитата:

Цитата lxa85
Т.е. еще раз. Смотрим все ходы, всех фигур, которые могут ходить (не открывая короля под бой), атаковать фигуру объявившую шах или закрывать короля + ходы короля, на безопасные клетки. »

- осталось все это организовать в своем алгоритме..
Спасибо, теперь есть почва для размышлений. :)

lxa85 27-05-2012 14:45 1923374

Цитата:

Цитата Killer_13
Спасибо, теперь есть почва для размышлений. »

На здоровье! :)
Программой потом поделитесь? (желательно в исходниках, исключительно для личного пользования)

Killer_13 27-05-2012 14:53 1923377

Цитата:

Программой потом поделитесь? (желательно в исходниках, исключительно для личного пользования)
- могу, мне не жалко.
Просто пока писалась локальная игра - код был читабельный, и менее более правильно запрограммирован - тоисть логика отделена от вьюва и так д..
Когда начал писать сетевой вариант началась каша.. как бы все работает.. но мне не нравится мой кашеварный код.. :( Сервер организовывал с помощью RPC. Но опять же чтоб моментально прослушивать ход или чат, таймер стучит серверу каждую секунду. Ну короч... много разного.. которое я бы имплементировал по другому, если было б время и... так д...

yurfed 27-05-2012 15:39 1923389

Цитата:

Цитата Killer_13
могу, мне не жалко. »

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

Killer_13 27-05-2012 16:28 1923409

Цитата:

Цитата yurfed
Очень будет интересно посмотреть на исходник. »

- чтоб мне стыдно стало? :(
Цитата:

Цитата yurfed
Возможно его тут и "вылижут" до блеска. »

- не сомневаюсь, но мне свои мозги шевелить нужно. :)
Цитата:

Цитата yurfed
Я сам не такой большеголовый сишник (наверно у вас написано на С), как lxa85, Iska, .... и многие другие, »

- а разве я говорил что это "С"? :) Это Java со свинговским интерфейсом, игрой по сети. чатом, историей и так д...
Цитата:

Цитата yurfed
Просто всегда есть интерес, каким образом складывается алгоритм у разных людей в окончательный, пусть и не доведёный до блеска эрзац »

- у меня например много лишнего кода.. Есть поле для рефакторинга, но опять же.. все упирается во время..

yurfed 27-05-2012 17:07 1923430

Цитата:

Цитата Killer_13
чтоб мне стыдно стало? »

Ну зачем так. Ни в коем случае.
Цитата:

Цитата Killer_13
но мне свои мозги шевелить нужно. »

Если будет пример и облизаный - тогда и будете шевелить мозгами - почему так, а не иначе :)
Цитата:

Цитата Killer_13
а разве я говорил что это "С"? »

Нет, не говорили. Что это будет на
Цитата:

Цитата Killer_13
Java со свинговским интерфейсом, игрой по сети. чатом, историей и так д... »

просто не ожидал.
Цитата:

Цитата Killer_13
у меня например много лишнего кода.. »

Вот и посмотрите на "полный минимализм" кода, если кто-то и ребят возьмётся для спортивного и общего интереса :)

Iska 27-05-2012 17:19 1923436

yurfed, справедливости ради токмо, скажу, что я давно уже не C-шник — в том плане, что мои познания в С устарели лет на пятнадцать-двадцать как минимум. Я остановился в программировании на C где-то на рубеже «закат эры DOS/Windows 3.1». По повсеместному распространению C++ прочёл несколько книг, дабы хоть иметь некоторое представление о базовых принципах, писать же на нём и вовсе ничего не писал. С C# знаком и вовсе понаслышке.

Так что, мой нынешний уровень — худо-бедно могу прочесть не специфический код, понять о чём он, попытаться определить причину конкретного поведения приложения. Но не более.

Killer_13 27-05-2012 17:23 1923438

Цитата:

Цитата yurfed
просто не ожидал. »

- почему? :)
Цитата:

Цитата yurfed
Вот и посмотрите на "полный минимализм" кода, если кто-то и ребят возьмётся для спортивного и общего интереса »

- да боюсь, что кто посмотрит на код, тот и скажет - лучше заново написать... :)

lxa85 27-05-2012 17:31 1923444

yurfed, я тебя тоже попрошу в приличном обществе не выражаться :) Я "паскалевик", в лучшем случае "дельфишник". Недавно писал "на коленке" код под бейсик. С++ я в лучшем случае - читаю, пытаюсь понять принцип работы.
Сишники у нас pav, ferget, Admiral, Delirium, Drongo.
P.S. Главное чтобы они мне теперь "вычитку" не сделали :)

Цитата:

Цитата yurfed
Вот и посмотрите на "полный минимализм" кода, если кто-то и ребят возьмётся для спортивного и общего интереса »

Я, честно сказать, хотел "из общего интереса" студентам сплавить, как задачу. Т.е. у меня исходный эталон (какой есть) у них его подобие.
Я тоже ожидал C++, не Java. С последней не успел подружиться. Будет повод :)

yurfed 27-05-2012 18:02 1923453

Iska, lxa85, ну чё наехали :) Откуда я знаю кто из вас любит розовый, а кто голубой. Отстаньте противные, я не хотел этого :).
Просто первые имена на вскидку...

Killer_13 27-05-2012 18:27 1923466

Если вы не утратили интерес к исходникам, то напомните через недельки 3. К тому времени должен доработать..

Killer_13 27-05-2012 23:04 1923628

Значит так, добился пока этого, прошу поправить если что пропустил...

1. Если 2 шаха, то мат! Тоисть если король атакован двумя фигурами и ему некуда бежать.(сделал).
2. Если шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру. Правильно?
3. Если фигуру нельзя побить и на пути нельзя ничего поставить и королю некуда бежать, то мат!

Еще варианты к определению мата в дополнение? Мыслей уже много прочитал, теперь стараюсь отобразить в коде, какие еще ситуации??

Еще бы придумать как "пат" определять...

Всем спасибо!

lxa85 27-05-2012 23:19 1923640

Цитата:

Цитата Killer_13
2. Если шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру. Правильно? »

Нет. Я могу закрыться допустим пешкой, прикрытой в свою очередь конем или другой фигурой.
Мат (шахматы)

CyberDaemon 27-05-2012 23:25 1923645

Цитата:

Цитата Killer_13
Я почему еще задал вопрос.. Я не знаю как заканчивать игру.. »

Вспомнилось.
Играл я во времена 8088 CGA и DOSа с компом в шахматы.
У получилось у меня загнать эту электронную башку в мат. Только кремниевоголовый нимало не смутился, что его королю мат, и сделал ответный ход.
Я сожрал ему короля :)
Комп продолжил играть без этой никчемной фигуры, а у меня стали внезапно пропадать фигуры с доски - похоже, призрак короля их ел :lol:

Killer_13 27-05-2012 23:28 1923647

Пока что остается реализовать только этот пункт, все остальное готово...
Цитата:

У игрока нет возможности закрыться от шаха другой фигурой;
- нужно пошевелить.. как это сделать...
Цитата:

Цитата lxa85
Нет. Я могу закрыться допустим пешкой, прикрытой в свою очередь конем или другой фигурой. »

- так это уже просчет в 2 хода..

Цитата:

Цитата CyberDaemon
Вспомнилось.
Играл я во времена 8088 CGA и DOSа с компом в шахматы.
У получилось у меня загнать эту электронную башку в мат. Только кремниевоголовый нимало не смутился, что его королю мат, и сделал ответный ход.
Я сожрал ему короля
Комп продолжил играть без этой никчемной фигуры, а у меня стали внезапно пропадать фигуры с доски - похоже, призрак короля их ел »

- вот-вот.. :)

yurfed 27-05-2012 23:36 1923655

Killer_13, а элементарно, условие на битое поле нет возможности пойти королём ни как?

lxa85 27-05-2012 23:47 1923670

Цитата:

Цитата Killer_13
- так это уже просчет в 2 хода.. »

Нет. Читай внимательно.
Цитата:

Цитата lxa85
Если шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру. Правильно? »
Нет. Я могу закрыться допустим пешкой, прикрытой в свою очередь конем или другой фигурой. »

Например развитие начальной позиции.
1: e4, f6. 2: Ф h5+
По твоей версии - мат. Шах с одной фигуры и фигуру нельзя побить остается только подложить на пути атакующей фигуры другую фигуру.
По моей версии - g6. Прикрыта она, не прикрыта - дело пятое. Я могу вскрыть линию жертвуя фигурой.


Время: 03:45.

Время: 03:45.
© OSzone.net 2001-