0

我正在开发一个我目前使用 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 算法的几篇文章,但他们没有谈论数据表示,我不知道如何正确地做到这一点,请你帮我找到一种干净的方法来表示模式以及如何更新它们。

谢谢。

4

1 回答 1

0

看看这个开源的 Gomoku: https ://github.com/garretraziel/gomoku

我想你会在那里找到很多有趣的想法。

于 2013-01-14T21:06:03.893 回答