Я работаю над игрой Gomoku, в настоящее время я использую GUI и т. Д., И мне нужно кодировать IA и Rule Checker (для необязательных правил, таких как Capture, запрещенные шаблоны и т. Д.).
Я планировал представить доску с массивом int что-то вроде:
uint goban[361];
Который будет представлять 19 * 19 Гобан (доска). Допустим, мы можем разделить 32-битное целое число на 4 байта, и внутри каждого байта мы можем хранить метаданные, например, так:
Я не знаю, подходит ли такое решение для ИИ Гомоку, но главная проблема, которую я имею, состоит в том, как написать это правильно. Давайте возьмем образец:
-OO-O-
Это открытый & три свободные, у него есть пространство внутри и на конце. Как я должен связать этот шаблон со статическим представлением без координат?
Еще одна проблема заключается в том, когда мне следует обновить шаблон и как, потому что из 361 случая это может быть довольно долго, если я обновлю предыдущий рисунок так:
XOO-O-
Я должен обновить все четыре случая, так что я не думаю, что это уместно, плюс это может повлиять на многие другие вертикальные / диагональные узоры.
Должен ли я сделать список шаблонов в настоящее время на карте, как это:
std::list<ThreatList> tlist;
и сделать карту простым трибуном или массивом символов?
Я хочу, чтобы мое представление данных давало мне максимум информации для быстрого обновления карты влияния, которая была бы заполнена моей оценочной функцией. Я прочитал несколько вещей о поиске в пространстве угроз и другом алгоритме Гомоку, но они не говорят о представлении данных, и я не понимаю, как это сделать правильно, не могли бы вы помочь мне найти чистый способ представления шаблона и как обновить их.
Спасибо вам.
Взгляните на этот открытый исходный код Gomoku:
https://github.com/garretraziel/gomoku
Я думаю, что вы найдете там много интересных идей.
Других решений пока нет …