Я написал шахматы GUI на Python, которые пока работают хорошо, и я пытаюсь заставить их работать с Stockfi sh, используя протокол UCI. Белые - человеческий игрок, и я использую Stockfi sh, чтобы вычислить лучший ход для черных. Проблема, с которой я столкнулся, заключается в том, что Stockfi sh возвращает только очень простые ходы, то есть продвигает первую пешку до упора, затем вторую и так далее. Мне было интересно, использую ли я правильные команды для его запуска. Вот сообщение со Stockfi sh из Python:
# SEND INFORMATION TO STOCKFISH AND ASK FOR NEXT MOVE
# WE ONLY DO THIS FOR THE BLACK PLAYER AS HE IS THE ROBOT
def robotMoves(self):
fen = self.getFEN() # FETCH THE CURRENT BOARD'S FEN STRING
j = Popen(['stockfish'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
j.stdin.write(b'setoption name Hash value 1024\n')
j.stdin.flush()
j.stdin.write(b'setoption name threads value 12\n')
j.stdin.flush()
j.stdin.write(b'position fen {0}\n'.format(fen))
j.stdin.flush()
j.stdin.write(b'go depth 100\n')
j.stdin.flush()
proc = j.communicate()[0]
result = re.findall(r'bestmove [a-h][0-8][a-h][0-8]', proc)
if len(result):
myMove = result[0].split(' ')[1]
# PERFORM PHYSICAL MOVE
oldRow, oldColumn = self.getRowColumn(myMove[0:2])
newRow, newColumn = self.getRowColumn(myMove[2:4])
pieceToMove = self.whatPiece(oldRow, oldColumn)
self.movePiece(pieceToMove, oldRow, oldColumn, newRow, newColumn)
self.setMsg('{0} {1} moves from {2} to {3}.'.format(pieceToMove.whichSide, pieceToMove.pieceType, myMove[0:2], myMove[2:4]))
set_y = newRow * 60 + 12
set_x = newColumn * 60 + 12
pieceToMove.piece.place(x=set_x, y=set_y)
else:
# FOR DEBUGGING, NO MOVE RETURNED
print proc
Моя строка FEN будет выглядеть как «r3r1k1 / pp3nPp / 1b1p1B2 / 1q1P1N2 / 8 / P4Q2 / 1P3PK1 / R6R». Часть движения работает нормально, просто ходы Stockfi sh пока вроде как неутешительны. Спасибо!
Эван