我正在开发一个我目前使用 GUI 等完成的五子棋游戏,我需要编写 IA 和规则检查器(用于可选规则,如捕获、禁止模式等)。我打算用一个 int 数组来代表董事会,比如:
uint goban[361];
这将代表 19 * 19 戈班(板)。假设我们可以将一个 32 位整数拆分为 4 个字节,并且在每个字节内我们可以像这样存储元数据,例如:
- 第一个字节:这种情况是空/黑/白吗?
- 第二个字节:这种情况是特殊模式的一部分吗?
- 第三个字节:我在图案的哪个位置?
- 第 4 个字节:我可以被捕获吗?
我不知道这种解决方案是否适用于 Gomoku AI,但我遇到的主要问题是如何正确编写它。让我们采取模式:
-OO-O-
这是一个开放和自由的三个,它在内部和末端都有空间。我应该如何将此模式与没有坐标的静态表示联系起来?
另一个问题是我应该什么时候更新模式以及如何因为在 361 案例中如果我将之前的数字更新为这个可能会很长:
XOO-O-
我必须更新所有四个案例,所以我认为它不合适,而且它会影响许多其他垂直/对角线图案。
我是否应该像这样列出当前在地图上的模式:
std::list<ThreatList> tlist;
并使地图成为一个简单的 tribool 或 char 数组?
我希望我的数据表示能够为我提供最大的信息,以便快速更新我的评估函数将填充的影响图。我已经阅读了有关威胁空间搜索和其他 Gomoku 算法的几篇文章,但他们没有谈论数据表示,我不知道如何正确地做到这一点,请你帮我找到一种干净的方法来表示模式以及如何更新它们。
谢谢。