#!/usr/bin/python
import chess.uci
import chess
import chess.pgn
import chess.svg
def set_engine(engine_path):
engine = chess.uci.popen_engine(engine_path)
engine.uci()
engine.ucinewgame()
return engine
def chess_match(engine1,engine2):
while not board.is_game_over():
engine1.position(board)
engine1_move,ponder= engine1.go(movetime=100)
board.push(engine1_move)
engine2.position(board)
engine2_move,ponder= engine2.go(movetime=100)
board.push(engine2_move)
print(engine1.name ," - ", engine2.name, board.result())
board = chess.Board()
start = board.set_fen(chess.STARTING_FEN)
engine1 = set_engine(".../Chess Engines/andscacs.exe")
engine2 = set_engine(".../Chess Engines/stockfish_18102108_x64_modern.exe")
for _ in range(6):
chess_match(engine1,engine2)
engine1, engine2 = engine2, engine1
В приведенном выше коде я пишу программу для проведения матча между шахматным движком с использованием модуля python-chess
. В этой строке кода
for _ in range(6):
chess_match(engine1,engine2)
engine1, engine2 = engine2, engine1
Я хочу провести 6 матчей между двигателями, и они будут меняться сторонами в каждой игре. engine1
и engine2
являются экземплярами класса chess.uci.Engine
. После того, как я попробовал код, результат один и тот же каждый раз, что означает, что двигатель не переключился на другую сторону. После некоторого просмотра я понимаю, что вы не можете поменять два экземпляра класса распаковкой кортежей. Я прочитал эту ветку об этой же проблеме, но все еще не могу понять, как написать метод подкачки. Я использую Python 3.6 в Windows 10.