英文:
What does stockfish.py log as a move when promoting?
问题
I will provide a translation of the code portion you mentioned:
我刚刚在使用stockfish库时做了一些尝试,将棋步转换为PGN文本格式时出现了错误。
目前,每一步棋都以这种格式出现:"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'升变? {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}'。
<br />
c7或bxc7。
<br />
但我相当确定它可能返回=Q。
Please note that code translation might not always be perfect due to technical terms and context.
英文:
So I was just messing around with the stockfish library and am converting the moves to a PGN text format and errored parsing the move
Right now every move comes in this format "a1b2" and I'm assuming a promotion would be something like this "c7c8=Q" but I'm not sure as it could be "c8=Q" as well. Here's some of the code
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)
I didn't have it before but I now have these try statements to print what comes back if it ever happens again
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:]
So now it will return f'{sq2}' or f'{sq1}x{sq2}'
<br />
c7 or bxc7
<br />
But I'm pretty sure it probably returned =Q instead
答案1
得分: 1
The stockfish
Python package 与 Stockfish Engine 的一个实例之间使用 UCI Protocol 进行通信,该协议使用长代数标记表示棋步,这意味着晋升会被编码为一个由5个字符组成的序列:前两个字符表示出发方格,接下来两个字符表示目标方格,最后一个字符表示兵晋升后的棋子类型。
这可以通过以下的FEN局面进行测试,其中最佳着法是晋升:
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())
输出:
c7c8q
英文:
The stockfish
Python package communicates with an instance of Stockfish Engine using the UCI Protocol, and the the protocol uses Long Algebraic Notation for moves, which means promotions are encoded as a sequence of 5 characters: two for the source square, two for the destination square, and one for the piece that the pawn is being promoted to.
This can be tested using this FEN position where the best move is to promote:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论