2

我试图了解位板表示在国际象棋编程中的工作原理,但我找不到关于一个细节的有用信息(或者只是无法正确翻译它^^)。我的问题是,如何自动生成掩码以逐个移动每个位置。我假设它是一个矩阵,其中每种类型都定义了他可以从该位置移动的每个字段(数组 [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

我假设我必须为每种类型和它可以步进的每个图块创建类似的东西,但我是否必须手动将其硬编码为数组,或者有可能在程序运行后自动化这个过程并预先计算它?

4

1 回答 1

3

您可以相当容易地预先计算您需要的所有位板,因为国际象棋的规则已经明确定义。例如,这里有一个函数(在 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 页面作为参考。

于 2014-01-19T23:20:12.023 回答