Java Ataxx游戏中状态的表示
我已经在这里问了一个关于这个主题的问题:Java Ataxx游戏中状态的表示,java,algorithm,tree,minimax,Java,Algorithm,Tree,Minimax,我已经在这里问了一个关于这个主题的问题: 但让我一步一步地说: 表示状态的最佳方式(或最佳数据结构)是什么(使用7x7网格板) *状态由游戏树的一个节点表示,但节点中有什么?价值观?一根绳子?另一种数据结构?整个电路板可以由某种整型的2D数组(即字节[]【】【】)或枚举[]【】表示。例如,0可以表示一个空单元格,1可以表示一个有玩家1的棋子的单元格,2可以表示一个有玩家2的棋子的单元格 游戏树中的节点通常是整个棋盘(因此字节[]【】或枚举[]【】【】) 如果您正在寻找一种更紧凑的电路板表示法,
但让我一步一步地说: 表示状态的最佳方式(或最佳数据结构)是什么(使用7x7网格板)
*状态由游戏树的一个节点表示,但节点中有什么?价值观?一根绳子?另一种数据结构?整个电路板可以由某种整型的2D数组(即
字节[]【】【】
)或枚举[]【】
表示。例如,0
可以表示一个空单元格,1
可以表示一个有玩家1的棋子的单元格,2
可以表示一个有玩家2的棋子的单元格
游戏树中的节点通常是整个棋盘(因此字节[]【】
或枚举[]【】【】
)
如果您正在寻找一种更紧凑的电路板表示法,您也可以使用or(2位,更容易使用)表示法来表示电路板,但这有点复杂(在出现内存/运行时间问题之前,您可能会一直使用2D数组-只要您将其抽象为一个类,转换就应该相当简单,并且易于测试)。整个电路板可以由某种整型的2D数组(即
字节[][
)或枚举[][]表示
。例如,0
可以表示一个空单元格,1
可以表示有玩家1的棋子的单元格,2
可以表示有玩家2的棋子的单元格
游戏树中的节点通常是整个棋盘(因此字节[]【】
或枚举[]【】【】
)
如果您正在寻找一种更紧凑的电路板表示法,您也可以使用or(2位,更容易使用)表示法来表示电路板,但这有点复杂(在出现内存/运行时间问题之前,您可能会一直使用2D数组-只要您将其抽象为一个类,转换就应该相当简单,并且易于测试)。整个电路板可以由某种整型的2D数组(即
字节[][
)或枚举[][]表示
。例如,0
可以表示一个空单元格,1
可以表示有玩家1的棋子的单元格,2
可以表示有玩家2的棋子的单元格
游戏树中的节点通常是整个棋盘(因此字节[]【】
或枚举[]【】【】
)
如果您正在寻找一种更紧凑的电路板表示法,您也可以使用or(2位,更容易使用)表示法来表示电路板,但这有点复杂(在出现内存/运行时间问题之前,您可能会一直使用2D数组-只要您将其抽象为一个类,转换就应该相当简单,并且易于测试)。整个电路板可以由某种整型的2D数组(即
字节[][
)或枚举[][]表示
。例如,0
可以表示一个空单元格,1
可以表示有玩家1的棋子的单元格,2
可以表示有玩家2的棋子的单元格
游戏树中的节点通常是整个棋盘(因此字节[]【】
或枚举[]【】【】
)
如果您正在寻找一种更紧凑的电路板表示法,您也可以使用or(2位,更容易使用)表示法来表示电路板,但这有点复杂(在开始出现内存/运行时间问题之前,您可能会一直使用2D数组-只要将其抽象到类中,转换就应该相当简单,并且易于测试).我会使用一种从国际象棋和跳棋中提取的非常有效的表示法:。这个概念是用位来表示棋子,因此玩家的棋子集可以用一个位域来表示。我们至少需要49位,所以64位整数可以很好地工作 这是一种内存和计算效率极高的表示法,而且比其他表示法更具表现力。通过按位操作,您可以轻松地同时处理单个片段和整个集合。使用基于数组的表示法,例如
byte[][]
建议,对于可以由带有位板的单个运算符表示的操作(&
,|
,^
,
,等等),您必须循环太多
设置的位给出玩家的棋子。例如,这可能是一个玩家的棋盘。你需要另一个玩家的棋盘
0000000000000000000000000000000010000000001000000
在十进制中,这将是long bitboard=65600;
。如果我们插入一些新行,它将如下所示:
0000000
0000000
0000000
0000000
0000100
0000000
1000000
为了有效地处理这个问题,我们可以预先计算一些表格。因此,对于第32位/正方形中心的工件,我们可能会有一个环绕表格,当用作环绕[square]
时,它给出:
0000000
0000000
0000000
0001110
0001010
0001110
0000000
然后,我们可以通过按位&
运算符找到它与对手的位板的交点,或者将其与|进行并集,或者与^
进行差分,等等。您可以使用将整个位板上移一行,我将采用国际象棋和跳棋中非常有效的表示:pt是用位来表示片段,因此播放器的片段集可以用一个位域来表示。我们至少需要49位,所以64位整数可以很好地工作
这是一种内存和计算效率极高的表示法,而且比其他表示法更具表现力。通过按位操作,您可以轻松地同时处理单个片段和整个集合。使用基于数组的表示法,例如byte[][]
建议,对于可以由带有位板的单个运算符表示的操作(&
,|
,^
,
,等等),您必须循环太多
设置位给出pl