为移动生成位板掩码

时间:2014-01-19 21:27:48

标签: move chess bitboard

我试图了解国际象棋编程中的位板表示是如何工作的,我找不到有关一个细节的有用信息(或者只是无法正确翻译^^)。我的问题是,如何生成自动遮罩,以便在每个位置移动每个位置。我假设它是一个矩阵,其中每个片段类型都定义了他可以从这个位置移动的每个场(阵列[5] [64]为wP,bP,K,R,N,B)。例如,对于下面位置的Rook,只允许的位置是:

0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
1 1 R 1 1 1 1 1
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0
0 0 1 0 0 0 0 0

我假设我必须为每个片段类型创建这样的东西,并且每个片段都可以步骤但是我必须手动将其硬编码到阵列,或者有可能自动化这个过程并在程序运行后预先计算它?

1 个答案:

答案 0 :(得分:1)

您可以非常轻松地预先计算所需的所有位板,因为国际象棋的规则已经明确定义。例如,这是一个函数(在python中),可以计算车辆的合法移动:

import sys

def rook(x, y):
    for i in range (1, 8):
        for j in range (1, 8):
            if x == i or y == j:
                sys.stdout.write("1")
            else:
                sys.stdout.write("0")
        sys.stdout.write("\n")

print "Bit board of legal moves for a rook at 1, 3:"
rook(1, 3)

您可能会以紧凑的格式存储它,而不是打印出位板,例如64位值的数组(因为8x8板需要每块板64位)。

这是一种相当极端的优化技术,所以它的实现细节会变得毛茸茸(并且很难调试)。

我使用wiki bitboard page作为参考。