C++ Gomoku数据在C中的表示

C++ Gomoku数据在C中的表示,c++,artificial-intelligence,evaluation,data-representation,gomoku,C++,Artificial Intelligence,Evaluation,Data Representation,Gomoku,我正在开发一款Gomoku游戏,目前我已经用GUI等完成了,我需要编写IA和规则检查器(用于可选规则,如捕获、禁止模式等)。 我计划用一个int数组来表示董事会,比如: uint goban[361]; 代表19*19戈班(棋盘)。假设我们可以将一个32位整数拆分为4个字节,在每个字节中我们可以存储如下元数据,例如: 第1字节:此大小写是否为空/黑/白 第二字节:这种情况是特殊模式的一部分吗 第3字节:我在模式的哪个位置 第四字节:我可以捕获吗 我不知道这种解决方案是否适用于Gomoku

我正在开发一款Gomoku游戏,目前我已经用GUI等完成了,我需要编写IA和规则检查器(用于可选规则,如捕获、禁止模式等)。 我计划用一个int数组来表示董事会,比如:

uint goban[361];
代表19*19戈班(棋盘)。假设我们可以将一个32位整数拆分为4个字节,在每个字节中我们可以存储如下元数据,例如:

  • 第1字节:此大小写是否为空/黑/白
  • 第二字节:这种情况是特殊模式的一部分吗
  • 第3字节:我在模式的哪个位置
  • 第四字节:我可以捕获吗
我不知道这种解决方案是否适用于Gomoku AI,但我遇到的主要问题是如何正确编写它。让我们以模式为例:

 -OO-O-
这是一个开放和自由的三,它有内部和末端的空间。我应该如何将这个模式与没有坐标的静态表示联系起来

另一个问题是我应该何时更新模式以及如何更新模式,因为在361个案例中,如果我将前面的图更新为此,可能会非常长:

 XOO-O-
我必须更新所有四种情况,所以我认为这不合适,而且它会影响许多其他垂直/对角模式

我是否应该像下面这样列出当前地图上的模式:

std::list<ThreatList> tlist;
std::list-tlist;
让地图变成一个简单的tribool或char数组

我希望我的数据表示能为我提供最大的信息,以快速更新影响图,该影响图将由我的评估函数填充。我读过一些关于威胁空间搜索和其他Gomoku算法的文章,但他们没有谈到数据表示,我也不知道如何正确地进行,你能帮我找到一种清晰的方式来表示模式并更新它们吗


谢谢。

看看这个开源的Gomoku:


我想你会发现很多有趣的想法。

如果你需要C中的一个解决方案,为什么选择C++标签?而不是试图在<代码> uTun<代码>中使用字节,为什么不使用一个包含代码(<代码>未签名char < /代码>?)成员的<代码>结构> <代码>?您不应该失去任何效率,您的代码将更易于编写和阅读。