Dumb7Fill 女王和车攻击似乎跳过 "ours" 件
Dumb7Fill queen and rook attacks seem to jump over "ours" pieces
我正在尝试玩国际象棋编程,目前正在为 BitBoards 编程。一切都很好,除了 Dumb7Fill(展开的循环)生成允许女王和车跳过他们的棋子的攻击。下面是执行的痕迹。我在这里做错了什么? *Attack 的代码直接取自 wiki 页面,这意味着将移动扩展为北、南、西和东移动的攻击。这是在 Java.
中编程的
long rooks = (One << index);
long empty = ~rep.getOccupancy();
long attacks = southAttack(rooks, empty)
| northAttack(rooks, empty)
| eastAttack(rooks, empty)
| westAttack(rooks, empty);
long actual = (attacks & rep.getCurrentPosition(getColor().inverse()));
ROOK ATTACKS w
rooks w
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
n: 1
empty w
. . . . . . . .
1 . . . . . . .
1 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 . . . . . . .
. . . . . . . .
n: 1fffefeff0100
theirs w
1 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
. . . . . . . .
p . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
n: fffe000100000000
ours w
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
P . . . . . . .
. . . . . . . .
. 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
n: 100feff
attacks from Dumb7Fill w
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
1 . . . . . . .
1 . . . . . . .
. . . . . . . .
. . 1 . . . . .
n: 101010004
actual attack w
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
n: 100000000
原来我误解了 wiki 页面上的算法。正如我对它们的解释,攻击包括移动一个,是攻击而不是移动。对于移动,需要使用遮挡填充。
我正在尝试玩国际象棋编程,目前正在为 BitBoards 编程。一切都很好,除了 Dumb7Fill(展开的循环)生成允许女王和车跳过他们的棋子的攻击。下面是执行的痕迹。我在这里做错了什么? *Attack 的代码直接取自 wiki 页面,这意味着将移动扩展为北、南、西和东移动的攻击。这是在 Java.
中编程的 long rooks = (One << index);
long empty = ~rep.getOccupancy();
long attacks = southAttack(rooks, empty)
| northAttack(rooks, empty)
| eastAttack(rooks, empty)
| westAttack(rooks, empty);
long actual = (attacks & rep.getCurrentPosition(getColor().inverse()));
ROOK ATTACKS w
rooks w
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
n: 1
empty w
. . . . . . . .
1 . . . . . . .
1 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 . . . . . . .
. . . . . . . .
n: 1fffefeff0100
theirs w
1 1 1 1 1 1 1 1
. 1 1 1 1 1 1 1
. . . . . . . .
p . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
n: fffe000100000000
ours w
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
P . . . . . . .
. . . . . . . .
. 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
n: 100feff
attacks from Dumb7Fill w
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
1 . . . . . . .
1 . . . . . . .
. . . . . . . .
. . 1 . . . . .
n: 101010004
actual attack w
. . . . . . . .
. . . . . . . .
. . . . . . . .
1 . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
n: 100000000
原来我误解了 wiki 页面上的算法。正如我对它们的解释,攻击包括移动一个,是攻击而不是移动。对于移动,需要使用遮挡填充。