我正在用Java编写一个九子棋游戏,已经实现了游戏规则和使用负极大值的AI。然而,游戏目前基于数组,当AI思考时(从6步开始),移动生成需要相当长的时间。
我的位置数组是基于以下图表的:
// 0 1 2// 3 4 5// 6 7 8// 9 10 11 12 13 14// 15 16 17// 18 19 20// 21 22 23
我还有其他数组,填充了可能的磨坊和相邻位置。
我决定将游戏从数组改为使用位板,这样移动生成和其他目前使用数组的区域将大大加快速度。
我的第一步是为每个玩家设置一个位板,用来跟踪玩家在棋盘上的棋子位置。
第二步是确定哪些位置是空的。我知道可以通过以下方式做到这一点:
freepositions = ~(player1bb | player2bb);
那么我的问题是,如何设置/更新玩家的位板来跟踪他们的棋子?
回答:
考虑到玩家的位板是24位长,棋盘上的位置0是第一位,当玩家移动时设置位板变得非常简单,只需执行以下操作:
player1bb |= (1 << pos);