|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.02.2012, 22:32 | #1 |
Регистрация: 03.02.2012
Сообщений: 3
|
Программирование шахмат
Пишу шахматы на Delphi (с нуля). Написал всё ядро, перебор на 3 полухода, играет для новичка неплохо) но думает долго. Доска представляется у меня массивом [1..8, 1..8] состоящий из символов фигур. Разобрался что конкретно долго считается. Это оказалась функция получения списка возможных ходов. Не подскажите идейку получше чем эта(которая сейчас имеется): Проходится массив i:=1 to 8 do for j:=1 to 8 do и если мы натыкаемся на фигуру то начинаем для неё внутренний цикл получения полей на которые она может пойти. Т.е. для ферзя например 8 циклов на все 8 сторон, и так для всех по тому же подобию. После всего делается виртуально каждый ход. Если при этом король не под шахом, то значит ход легальный и заносится в финальный массив ходов. Т.е. получается слишком много перебора((
|
03.02.2012, 23:15 | #2 |
Форумчанин
Регистрация: 06.11.2011
Сообщений: 214
|
Мне кажется AI должен вырабатывать стратегию на данную партию и ее придерживаться. Если я понял твой алгоритм, то он просто ходит и не связывает ни как ходы => мат он наврядли тебе поставит пока ты сам короля не доставишь.
Когда он выбрал как играть, должен уже смотреть за доской, что изменилось и что под атакой, и как атаковать. эт лично мое мнение по AI ) P.S. был когда то 2 разряд по шахматам:D
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL Последний раз редактировалось Inv1s; 03.02.2012 в 23:18. |
04.02.2012, 11:11 | #3 |
Регистрация: 03.02.2012
Сообщений: 3
|
Программирование шахматной игры
Ну он видит мат в 1 и 2 хода, не дальше. (из-за 3 полуходов). Т.е. задачи двухходовки с матом решает все на 100%.
P.S. сейчас у меня 1 разряд :D Последний раз редактировалось Andeo; 04.02.2012 в 12:36. |
04.02.2012, 19:55 | #4 |
Форумчанин
Регистрация: 06.11.2011
Сообщений: 214
|
У тебя пересчет всей доски, что не эффективно, т.к. я хожу одной фигурой и меняю совсем немного ситуацию на доску(ну иногда много(тогда и немного дольше считалось бы)), программа должна смотреть что изменилось. Хотя как просмотр изменений сделать с ходу не прикину.
P.S. блин, у меня так то уже 4 стал, пожизненный:D
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL |
04.02.2012, 20:19 | #5 |
Регистрация: 03.02.2012
Сообщений: 3
|
Спасибо=) Я тут чуток исправил, когда она ищет мат, то ей не обязательно получать список всех возможных ходов противника, достаточного одного - значит уже не мат. А она перебирала полностью. Сейчас длительность обдумывания хода у проги сократилось с 2 мин до 20-30 сек, но проблема конечно ещё актуальна. По поводу того, что меняется только часть, тут сложно сказать, если двинуть пешку которая защищает короля от шаха, то на короля может напасть фигура стоящая на противоположном конце доски) Сложновастенько получается)
|
27.02.2012, 09:54 | #6 |
Новичок
Джуниор
Регистрация: 27.02.2012
Сообщений: 1
|
Недавно тоже заинтересовался этой темой. Насколько я понимаю, все ходы, конечно переберать не обязательно. Нужно использовать алгоритм альфа-бета отсечений.
Можно почитать книжку Корниленко про программирование шахмат, там более подробно. Или погуглить)) |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Бот для Шахмат | Vedrus | Фриланс | 18 | 05.06.2015 17:27 |
Программирование или web-программирование? | Дмитрий Батогов | Помощь студентам | 3 | 23.06.2011 14:14 |
Программирование на С# | okfx | Фриланс | 1 | 04.09.2010 13:11 |
Нужна помощь в дописании шахмат на Delphi!!! | JIuRuK | Помощь студентам | 0 | 14.12.2009 14:37 |
1C программирование | Last | Свободное общение | 8 | 21.01.2009 12:10 |