C语言中的Gomoku数据表示

Gomoku datas representation in C

本文关键字:Gomoku 数据表示 语言      更新时间:2023-10-16

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

uint goban[361];

表示一个19 * 19的棋盘。假设我们可以将一个32位整数分成4个字节,在每个字节中我们可以存储这样的元数据,例如:

  • 第一个字节:this case Is empty/black/white ?
  • 第二个字节:这是一个特殊模式的一部分吗?
  • 第3个字节:我在模式的哪个位置?
  • 第4个字节:我可以捕获吗?

我不知道这种解决方案是否适用于Gomoku AI,但我遇到的主要问题是如何正确地编写它。以pattern为例:

 -OO-O-

这是一个开放的&自由三,它的内部和末端都有空间。我该如何将此模式与没有坐标的静态表示相关联?

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

 XOO-O-

我必须更新所有四种情况,所以我认为这是不合适的,加上它会影响许多其他垂直/对角线模式。

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

std::list<ThreatList> tlist;

并使映射成为一个简单的tribool或char数组?

我希望我的数据表示给我最大的信息,以获得影响图的快速更新,这将由我的评估函数填充。我读过一些关于威胁空间搜索和其他Gomoku算法的东西,但它们没有讨论数据表示,我不知道如何正确地做到这一点,你能帮我找到一种干净的方式来表示模式以及如何更新它们吗?

谢谢你。

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

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