Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2012, 22:32   #1
Andeo
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию Программирование шахмат

Пишу шахматы на Delphi (с нуля). Написал всё ядро, перебор на 3 полухода, играет для новичка неплохо) но думает долго. Доска представляется у меня массивом [1..8, 1..8] состоящий из символов фигур. Разобрался что конкретно долго считается. Это оказалась функция получения списка возможных ходов. Не подскажите идейку получше чем эта(которая сейчас имеется): Проходится массив i:=1 to 8 do for j:=1 to 8 do и если мы натыкаемся на фигуру то начинаем для неё внутренний цикл получения полей на которые она может пойти. Т.е. для ферзя например 8 циклов на все 8 сторон, и так для всех по тому же подобию. После всего делается виртуально каждый ход. Если при этом король не под шахом, то значит ход легальный и заносится в финальный массив ходов. Т.е. получается слишком много перебора((
Andeo вне форума Ответить с цитированием
Старый 03.02.2012, 23:15   #2
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

Мне кажется AI должен вырабатывать стратегию на данную партию и ее придерживаться. Если я понял твой алгоритм, то он просто ходит и не связывает ни как ходы => мат он наврядли тебе поставит пока ты сам короля не доставишь.
Когда он выбрал как играть, должен уже смотреть за доской, что изменилось и что под атакой, и как атаковать. эт лично мое мнение по AI )

P.S. был когда то 2 разряд по шахматам:D
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL

Последний раз редактировалось Inv1s; 03.02.2012 в 23:18.
Inv1s вне форума Ответить с цитированием
Старый 04.02.2012, 11:11   #3
Andeo
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию Программирование шахматной игры

Ну он видит мат в 1 и 2 хода, не дальше. (из-за 3 полуходов). Т.е. задачи двухходовки с матом решает все на 100%.

P.S. сейчас у меня 1 разряд :D

Последний раз редактировалось Andeo; 04.02.2012 в 12:36.
Andeo вне форума Ответить с цитированием
Старый 04.02.2012, 19:55   #4
Inv1s
Форумчанин
 
Аватар для Inv1s
 
Регистрация: 06.11.2011
Сообщений: 214
По умолчанию

У тебя пересчет всей доски, что не эффективно, т.к. я хожу одной фигурой и меняю совсем немного ситуацию на доску(ну иногда много(тогда и немного дольше считалось бы)), программа должна смотреть что изменилось. Хотя как просмотр изменений сделать с ходу не прикину.

P.S. блин, у меня так то уже 4 стал, пожизненный:D
Помог, нажми на весы
html, js, php, С++, С#, OpenGl, DirectX, XNA, HLSL
Inv1s вне форума Ответить с цитированием
Старый 04.02.2012, 20:19   #5
Andeo
 
Регистрация: 03.02.2012
Сообщений: 3
По умолчанию

Спасибо=) Я тут чуток исправил, когда она ищет мат, то ей не обязательно получать список всех возможных ходов противника, достаточного одного - значит уже не мат. А она перебирала полностью. Сейчас длительность обдумывания хода у проги сократилось с 2 мин до 20-30 сек, но проблема конечно ещё актуальна. По поводу того, что меняется только часть, тут сложно сказать, если двинуть пешку которая защищает короля от шаха, то на короля может напасть фигура стоящая на противоположном конце доски) Сложновастенько получается)
Andeo вне форума Ответить с цитированием
Старый 27.02.2012, 09:54   #6
Man on the Moon
Новичок
Джуниор
 
Регистрация: 27.02.2012
Сообщений: 1
По умолчанию

Недавно тоже заинтересовался этой темой. Насколько я понимаю, все ходы, конечно переберать не обязательно. Нужно использовать алгоритм альфа-бета отсечений.
Можно почитать книжку Корниленко про программирование шахмат, там более подробно. Или погуглить))
Man on the Moon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Бот для Шахмат 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