繁体   English   中英

stockfish.py 在推广时将什么记录为移动?

[英]What does stockfish.py log as a move when promoting?

所以我只是在摆弄 stockfish 库并将动作转换为 fgn 文本格式并错误地解析动作

现在每一步都采用这种格式“a1b2”,我假设晋升会是这样的“c7c8=Q”,但我不确定它也可能是“c8=Q”。 这是一些代码

best_w = stockfish.get_top_moves(3)
best_w = best_w[random.randint(0,2)]['Move']
fgn_w = getfgn(best_w)

best_b = stockfish.get_top_moves(3)
best_b = best_w[random.randint(0,2)]['Move']
fgn_b = getfgn(best_b)

我以前没有它,但我现在有这些 try 语句来打印如果它再次发生会返回的内容

def getfgn(move):
  try:
    piece = stockfish.get_what_is_on_square(move[:2])
  except:
    print(f'Promotion? {move}')
    #piece = stockfish.get_what_is_on_square(move[2:2])?? 
  capt = stockfish.will_move_be_a_capture(move)
  try:
    sq1 = move[:2]
  except:
    print(move)
    #sq1 = move[2:2]??
  sq1 = sq1[:1]
  sq2 = move[2:]

所以现在它将返回 f'{sq2}' 或 f'{sq1}x{sq2}'
c7 或 bxc7
但我很确定它可能会返回 =Q

stockfish Python package 使用UCI Protocol与 Stockfish Engine 的实例通信,该协议使用Long Algebraic Notation进行移动,这意味着促销被编码为 5 个字符的序列:两个用于源方块,两个用于目标方块, 一个代表典当被提升到的棋子。

这可以使用 FEN position 进行测试,其中最好的举措是宣传:

from stockfish import Stockfish

stockfish = Stockfish()
stockfish.set_fen_position("8/1KPk4/8/8/8/8/8/8 w - - 0 1")
print(stockfish.get_best_move())

Output:

c7c8q

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM