Comments 16
Раз уж пошла околошахматная JS тема на хабре, то поделюсь своим мини-проектом — шахматы на js
код на codepen
Попробовать для удобства
Если интересна «пошаговая инструкция» готов описать «путь создания»
Если у кого-то есть хороший материал по написанию шахматных ботов, поделитесь, буду очень благодарен.
код на codepen
Попробовать для удобства
Если интересна «пошаговая инструкция» готов описать «путь создания»
Если у кого-то есть хороший материал по написанию шахматных ботов, поделитесь, буду очень благодарен.
На самом деле, сам пребываю в «пассивном» поиске способов написания.
Единственный способ, который знаю, довольно простой:
Для каждой фигуры определяем вес. (скажем пешка = 1, слон = 3 и так далее.)
Первоначально определяем для каждой клетки ее вес. (здесь стоит сказать, что фигура на крае «карты» всегда менее ценна, чем фигура ближе к центру. Поэтому определяем в соответствие с этими правилами весы клеток на шахматном поле. )
Для некоторых фигур можно определить массив положений (например для пешек — чем ближе к противоположному концу поля -> тем лучше)
Также необходимо определить в виде весов случаи — наша фигура N под ударом противника, наша фигура N под защитой другой нашей фигуры, фигура N съедает фигуру M противника
Окей. С определениями закончили.
Следующий шаг простой — в существующий алгоритм добавляем проверку на ход AI.
Что будет делать AI — в его задачи входит:
1) оценка текущей ситуации на поле (по весам) -> сумма весов
2) Задаем AI брать по очереди каждую фигуру и делать возможный ход -> пересчет весов.
3) Выбор максимального веса.
Из дальнейших улучшений -> после каждой оценки возможного хода — оценка ответного хода человека -> выбор макс по двум оценкам (чем расчет идет «глубже», тем лучше играет AI)
теперь отступление от представленной краткой нотации алгоритма — писал шахматы в виде первой пробы в JS — тогда был ужаснейший код. Представленное в сообщении выше — это переписанный код. Но есть и пример кода (жаль, что он не совсем корректный, но ради интереса попробовать — можно тут
Единственный способ, который знаю, довольно простой:
Для каждой фигуры определяем вес. (скажем пешка = 1, слон = 3 и так далее.)
Первоначально определяем для каждой клетки ее вес. (здесь стоит сказать, что фигура на крае «карты» всегда менее ценна, чем фигура ближе к центру. Поэтому определяем в соответствие с этими правилами весы клеток на шахматном поле. )
Для некоторых фигур можно определить массив положений (например для пешек — чем ближе к противоположному концу поля -> тем лучше)
Также необходимо определить в виде весов случаи — наша фигура N под ударом противника, наша фигура N под защитой другой нашей фигуры, фигура N съедает фигуру M противника
Окей. С определениями закончили.
Следующий шаг простой — в существующий алгоритм добавляем проверку на ход AI.
Что будет делать AI — в его задачи входит:
1) оценка текущей ситуации на поле (по весам) -> сумма весов
2) Задаем AI брать по очереди каждую фигуру и делать возможный ход -> пересчет весов.
3) Выбор максимального веса.
Из дальнейших улучшений -> после каждой оценки возможного хода — оценка ответного хода человека -> выбор макс по двум оценкам (чем расчет идет «глубже», тем лучше играет AI)
теперь отступление от представленной краткой нотации алгоритма — писал шахматы в виде первой пробы в JS — тогда был ужаснейший код. Представленное в сообщении выше — это переписанный код. Но есть и пример кода (жаль, что он не совсем корректный, но ради интереса попробовать — можно тут
Возможно вам будет интересно: coursera.org/course/ggp
пешка достигнув противоположной стороны должна иметь возможность «превратиться». этого нету.
Мне кажется(или я неправильно понимаю) что не все понимают значение блок-схем. В моем понимании блок-схема алгоритма должна показывать Человеку, а не компьютеру принципы действия, она не должна быть привязана к какому либо языку, ведь один алгоритм можно написать на многих языках. А вот как сейчас учат в вузах описывать каждую строчку кода — бред.
В вузах учат оформлять блок-схемы по ГОСТ'у. По крайней мере в моем… И использование в оной привязки к ЯП «жестоко карается».
А по реализации непосредственно уголков — очень иногда сложно понять, как шашка с одного места оказалась в другом — может быть последовательно каждый прыжок «прорисовывать»?
А по реализации непосредственно уголков — очень иногда сложно понять, как шашка с одного места оказалась в другом — может быть последовательно каждый прыжок «прорисовывать»?
Ну если описывать это на естественном языке, это разрастется до больших размеров. В блок схеме я просто пытался наглядно описать мой алгоритм. Да, было ошибкой вставлять инструкции из JavaScript, лучше было бы в блоках использовать псевдокод.
У меня вот тоже есть шахматы без ИИ :)
В основе все тот же chess.js.
В основе все тот же chess.js.
Когда пешка достигает последней линии она может превратиться в любую фигуру. И не всегда это ферзь.
Вы ссылку открывали вообще? Там же стоит переключалка promotion, которая определяет, во что превращается пешка.
я всегда просто прохожу до последней линии и смотрю. — мне автоматом выдало ферзя.
о блин! заметил. я ожидаю запрос ПОСЛЕ Прохода, а не переключалка ДО хода :)
о блин! заметил. я ожидаю запрос ПОСЛЕ Прохода, а не переключалка ДО хода :)
Sign up to leave a comment.
Игра на JavaScript «Уголки»