А у кого есть опыт в написании шахмат?)))


Сегодня утром проснулся и понял, что ни разу не пробовал написать шахматы. Ну и начал писать. Ну и, к тому же, на одном форуме прочитал, что метод Монте-Карло не всякий программист сможет осилить. Воспринял это как вызов.
От объектно-ориентированного отказался сразу. Долго объяснять не буду.
Полгода назад, на одном форуме, возник спор на тему самоорганизации в динамических системах. Одну из таких систем хочу смоделировать на шахматном поле. Для этого нужны массивы.
Намудрил. Сейчас перефразирую. Необходимо рассматривать отдельную позицию как состояние системы, без привязки к предыдущим позициям. Если пихать фигуры в объекты, как определить, какому из объектов соответствуют вот эти две белые пешки справа. Или ладья.

Доску инициализировал в виде трехмерного массива:

i и j - горизонталь и вертикаль. k - фигура:
0, 6 - король (белый, черный)
1, 7 - ферзь
2, 8 - ладья
3, 9 - слон
4, 10 - конь
5, 11 - пешка
Довольно удобно получилось. В нужном месте вызываем board[y][x].indexOf(1); чтобы узнать, какая фигура находится в указанной клетке (если возвращает -1 - клетка не занята).
Написал интерфейс, чтобы фигуры можно было двигать: http://xcont.com/chess/ (ну да, можно первым же ходом, любой фигурой, короля противника слопать)))
А вот как фигуры ходят - с этим возникла проблема. Начал с короля, сделал проверку, чтобы он ходил не дальше, чем на одну клетку:

И тут затормозил. Надо проверять, находится ли клетка, в которую ходим, под ударом. Написал пока только коней - получилась какая-то жесть.
Как лучше сделать? Вот тупо все проверки клеток "под ударом" свалить сюда к королю, или выделить отдельную матрицу, в которой отметить, какие клетки находятся под ударом. А точнее, какое количество фигур бьет определенную клетку. Ну и сдвигая фигуру, переписывать эту матрицу.
|
</> |