Поменяйте местами два экземпляра класса - PullRequest
0 голосов
/ 03 ноября 2018
#!/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.

1 Ответ

0 голосов
/ 03 ноября 2018

не совсем то решение, которое вы запрашиваете, но как насчет добавления другой переменной bool для определения, какой двигатель должен запуститься?

swap = False
for _ in range(6):
    chess_match(swap and engine2 or engine1, swap and engine1 or engine2)
    swap = not swap
...