我正在尝试下象棋编程,目前正在编程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
答案 0 :(得分:0)
原来,我在Wiki页面上误解了算法。攻击包括一次移动,是攻击而不是移动,正如我所解释的那样。对于移动,需要使用遮挡填充。