如何用Bitboard检测Connect 4中的7形陷阱并验证空位?
Connect 4 7形陷阱检测修复方案
当前代码的问题很明确:只验证了目标玩家没占据两个交叉空位,但没检查对手是否也占据了这些位置——陷阱成立的前提是这两个空位必须完全空闲,不能有任何一方的棋子。
修复后的代码
is7Trap(bitboard, player) { const bp = bitboard[player]; const bo = bitboard[1 - player]; // 提取7形的掩码,避免重复计算 const shapeMask = bp & (bp >> 2n) & (bp << 5n) & (bp << 6n) & (bp << 12n); const shapeExists = shapeMask !== 0n; // 计算两个交叉空位的掩码 const topSpotMask = shapeMask << 18n; const bottomSpotMask = shapeMask << 19n; // 检查两个空位是否双方都未占据 const topSpotFree = (bp & topSpotMask) === 0n && (bo & topSpotMask) === 0n; const bottomSpotFree = (bp & bottomSpotMask) === 0n && (bo & bottomSpotMask) === 0n; console.log("shapeExists", shapeExists); console.log("topSpotFree", topSpotFree); console.log("bottomSpotFree", bottomSpotFree); console.log(bp.toString(2)); console.log(bo.toString(2)); return shapeExists && topSpotFree && bottomSpotFree; }
关键修复点
- 提取
shapeMask复用,减少重复的位运算,让代码更易读 - 新增对手bitboard(
bo)的空位检查:不仅要确保当前玩家没占空位,还要确认对手也没占据,保证空位完全空闲 - 简化了返回逻辑,直接返回条件判断结果,无需多余的if分支
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

