【发布时间】:2020-11-28 01:11:51
【问题描述】:
我想将 UCI-move 转换为 bitboard。
例如 a2a3 -> 32768, 8388608
我需要将 [7,6,...,0] 分配给 [a,b,...,h] 以便对于每个字母我都有分配的数字 (n) 来计算 2^n
然后我可以左移 uci[1] 或 uci[3] *8 中的值,具体取决于 start- 或 endfield。
这是我的方法,看起来不太好和多余。
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
【问题讨论】:
-
你可以在这里问:codereview.stackexchange.com
标签: chess code-cleanup bitboard