我 for each 玩家准备了这样的位板表示:
00000000 0000000 0000001 0000010 0000100 0010001 0000101 0000000 0000001
00000000 0000000 0000000 0000001 0000011 0001110 0000010 0000000 0000000
其中每个部分都是一列,最右边的7位部分表示第一列.每个部分中最右边的位表示第一行.
我有一个高度数组,可以跟踪我可以放置一件物品的高度.
我在JavaScript中使用BigInt来表示电路板.一人一张.
bitboard = [0n, 0n];
heightBB = [0, 7, 14, 21, 28, 35, 42];
以下是我采取行动的方式:
playMoveBB(state, col, player) {
let move = 1n << BigInt(state.heightBB[col]);
state.heightBB[col]++;
state.bitboard[player] = state.bitboard[player] ^ move;
}
以下是我判断是否成功的方法:
__isWin(bitboard) {
if ((bitboard & (bitboard >> 6n) & (bitboard >> 12n) & (bitboard >> 18n)) !== 0n) return true; // diagonal \
if ((bitboard & (bitboard >> 8n) & (bitboard >> 16n) & (bitboard >> 24n)) !== 0n) return true; // diagonal /
if ((bitboard & (bitboard >> 7n) & (bitboard >> 14n) & (bitboard >> 21n)) !== 0n) return true; // horizontal
if ((bitboard & (bitboard >> 1n) & (bitboard >> 2n) & (bitboard >> 3n)) !== 0n) return true; // vertical
return false;
}
我怎样才能判断中柱的对称性?因此,从中柱Angular 来看,板的左侧与板的右侧相同.
我如何使用Connect 4游戏的这个位板表示法来实现这一点?