Comments 14
На го надо писать сервер для..... го
Какие ещё проблемы возникают при анализе хода, если оперировать координатами фигур в виде чисел от 0 до 63?
На Хабре есть статья, где анализ проводят именно в таком виде
При анализе возникает неопределённость. Допустим, мы хотим посмотреть, куда может двигаться ладья. Напишем алгоритм, который ищет поля, чьи id соответствуют движению по вертикали и горизонтали. То есть написать какой-нибудь for, который будет имитировать движение по доске (а в реальности по массиву id) Но рано или поздно мы подходим к краю доски. Следовательно, по этому направлению мы должны остановить "движение". В случае с координатами всё просто - x и y меняются от 0 до 7. Но в случае с одномерным массивом мы не можем просто так понять вышли ли мы за пределы доски. Так как фигура просто телепортируется за на противоположный конец поля (например ладья с поля 7 на поле 8).
Решить эту проблему можно. Например, анализировать не поле 8 на 8, а 12 на 12. То есть создать ''буферную зону" по краям, чьи id будут однозначно говорить, что это поле не игровое. 12 на 12 потому что конь прыгает через два ряда.
Но зачем столько мороки, когда можно анализировать просто координаты?)
Согласен, использование одномерных координат выглядит для анализа и правда выглядит переусложнённым
Ну там много чего придумано, на самом деле.
Сейчас координаты каждой фигуры занимают 16 байт в памяти, а могли бы занимать 1. Можно использовать не номера ячеек на доске, а паковать XXXXYYYY в один байт. Любой алгоритм анализа будет очень рад если значения будут умещаться в регистры процессора.
Изначально я писал шахматную логику "вслепую", было интересно самому реализовать всё, не подсматривая, и по-спотыкаться о подводные камни. Потом уже стал сравнивать)
Мне очень понравилась идея записи состояния игры с личесс. Раньше я там просто играл и не пользовался дополнительным функционалом. Можно зайти в 'инструменты' -> 'редактор доски' и увидеть записи вида:
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Это состояние соответствует начальной расстановке фигур на доске)
Там есть вещи до которых очень сложно самому додуматься. Очень много людей думало и продолжительное время. В любом случае, стоит ознакомиться хотя бы по верхам.
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
Очень удобная нотация. И пригодная не для одних только Шахмат.
Это конечно интересно, но это механика. Гораздо сложнее придумать эвристики оценочной функции для ограничения перебора ходов. По моему убеждению шахматы это на 90% геометрия и на 10% комбинаторика. У меня даже возникла идея разработки движка на SQL/noSQL под это предположение. Доска как таблица, позиция как ячейки-паттерны с узлами различных свойств и весов. А идея такова что нужно определить, возможна ли такая эвристика, которая оценивает позицию на один ход без перебора ходов в процессе игры. Комбинаторика, или перебор ходов включается только тогда когда эвристики скажут что здесь нужно считать. Допустим когда есть предпосылки комбинации или перехода в выигранный эндшпиль и т д и тп. Вот это было бы интересно для меня. В шахматы играю давно, есть победа в сеансе над мастером. Имел когда-то первый разряд. Играю на личесс через смартфон, но больше в процессе перемещения на работу и обратно. Время течёт незаметно тогда. На SQL с логикой в хранимых процедурах разработал несколько систем, одна из них описана в моей статье на этом сайте.
Тапните по моему Нику в сообщении, на моей странице публикация на хабре. Ссылка вставляется но сообщение не отправляется
Go напишем шахматный сервер? Часть вторая — структуры, интерфейсы и методы