首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有更好的方式用Python编写这段代码?(将UCI-move转换为bitboard,国际象棋)

有没有更好的方式用Python编写这段代码?(将UCI-move转换为bitboard,国际象棋)
EN

Stack Overflow用户
提问于 2020-08-08 00:53:50
回答 1查看 60关注 0票数 2

我想把UCI-move转换成bitboard。

例如a2a3 -> 32768、8388608

我需要将7,6,...,0赋给a,b,...,h,这样对于每个字母,我都有一个分配的数字(N)来计算2^n

然后,我可以根据开始字段或结束字段按uci1或uci3 *8中的值向左移位。

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2020-10-11 03:59:30

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

代码语言:javascript
复制
    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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63306177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档