我 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游戏的这个位板表示法来实现这一点?

推荐答案

这是将三个右(高位)列移动到它们低端的镜像位置,并将其与三个左(低位)列进行比较:

const isSymmetrical = (bitboard) => bitboard.every(b => 
    (b & 0x1FFFFFn) === ((b >> 42n) & 0x00007Fn | 
                         (b >> 28n) & 0x003F80n | 
                         (b >> 14n) & 0x1FC000n)
);

Javascript相关问答推荐

如何在不分配整个数组的情况下修改包含数组的行为主体?

Bootstrap动态选项卡在切换选项卡后保持活动状态,导致元素堆叠

我开始使用/url?q=使用Cheerio

如何解决chrome—extension代码中的错误,它会实时覆盖google—meet的面部图像?'

网页自检测外部元素无法加载

在这种情况下,如何 for each 元素添加id?

仅针对RTK查询中的未经授权的错误取消maxRetries

我们如何从一个行动中分派行动

空的结果抓取网站与Fetch和Cheerio

无法访问Vue 3深度监视器中对象数组的特定对象值'

匹配一个或多个可选重复的特定模式

使用jQuery find()获取元素的属性

在渲染turbo流之后滚动到元素

在Java脚本中录制视频后看不到曲目

JavaScript:多个图像错误处理程序

带元素数组的Mongo聚合

在不使用AJAX的情况下将JavaScript数组值传递给Laravel控制器?

已在EventListener中更新/更改异步的React.js状态对象,但不会导致组件重新呈现

如何在不获取其子元素的文本内容的情况下获取元素的文本内容?

我正在为我的单选按钮在HTML中设置一个值.使用Java脚本,我如何才能获得该值?