2

我想将 UCI-move 转换为 bitboard。

例如 a2a3 -> 32768, 8388608

我需要将 [7,6,...,0] 分配给 [a,b,...,h] 以便对于每个字母我都有分配的数字(n)来计算 2^n

然后我可以根据开始或结束字段左移 uci[1] 或 uci[3] *8 中的值。

这是我的方法,它看起来不太好和多余。

def ucitoBit(uci):
    if uci[0] == 'a':
        mask1 = 2 ** 7
    if uci[0] == 'b':
        mask1 = 2 ** 6
    if uci[0] == 'c':
        mask1 = 2 ** 5
    if uci[0] == 'd':
        mask1 = 2 ** 4
    if uci[0] == 'e':
        mask1 = 2 ** 3
    if uci[0] == 'f':
        mask1 = 2 ** 2
    if uci[0] == 'g':
        mask1 = 2 ** 1
    if uci[0] == 'h':
        mask1 = 2 ** 0
    mask1 = mask1 << 8 * (int(uci[1]) - 1)

    if uci[2] == 'a':
        mask2 = 2 ** 7
    if uci[2] == 'b':
        mask2 = 2 ** 6
    if uci[2] == 'c':
        mask2 = 2 ** 5
    if uci[2] == 'd':
        mask2 = 2 ** 4
    if uci[2] == 'e':
        mask2 = 2 ** 3
    if uci[2] == 'f':
        mask2 = 2 ** 2
    if uci[2] == 'g':
        mask2 = 2 ** 1
    if uci[2] == 'h':
        mask2 = 2 ** 0
    mask2 = mask2 << 8 * (int(uci[3]) - 1)
    bitstring = [np.uint64(mask1), np.uint64(mask2)]
    return bitstring
4

1 回答 1

1

如何定义两个包含行和列索引的数组并像这样使用它们:

    rows = ["1", "2", "3", "4", "5", "6", "7", "8"]
    cols = ["a", "b", "c", "d", "e", "f", "g", "h"]

def parse_move(move):
    from_col, from_row, to_col, to_row = list(move)
    from_sq = 2**((7 - cols.index(from_col)) + 8*rows.index(from_row))
    to_sq = 2**((7 - cols.index(to_col)) + 8*rows.index(to_row))
    return [from_sq, to_sq]
于 2020-10-10T19:59:30.330 回答