Dumb7Fill女王/王后和菜鸟的袭击似乎跳过了“我们的”棋子

时间:2019-10-04 14:14:00

标签: chess

我正在尝试下象棋编程,目前正在编程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

1 个答案:

答案 0 :(得分:0)

原来,我在Wiki页面上误解了算法。攻击包括一次移动,是攻击而不是移动,正如我所解释的那样。对于移动,需要使用遮挡填充。