简体   繁体   English

python 在简单国际象棋程序中跳过代码的问题

[英]Issue with python skipping code in simple chess program

I am creating a simple program for chess, and I ran to an issue of supposedly python skipping code.我正在为国际象棋创建一个简单的程序,我遇到了一个据称是 python 跳过代码的问题。 Program entry is: find_side()程序入口为:find_side()

Console output:控制台输出:

Enter your team(1-black 2-white):1
<PlayResult at 0x3ec1dc0 (move=e2e4, ponder=d7d5, info={}, draw_offered=False, resigned=False)>
Enter your enemies move:

According to the console output, engine randomly generated move for the White player and made a counter-response in ponder.根据控制台输出,引擎为白方随机生成走法,并在思考中做出反击。 But I have input for that, looks like, that python is executing result_engine sooner than user input.但是我有输入,看起来,python 比用户输入更早地执行result_engine Also, there's one more problem.此外,还有一个问题。 Engine completely ignores the chess.engine.turn = turn line. Engine 完全忽略chess.engine.turn = turn线。 I am using stockfish 11 as an engine and import chess as an link between python code and engine with universal chess engine Code:我使用stockfish 11作为引擎并import chess作为python代码和具有通用国际象棋引擎代码的引擎之间的链接:

import chess
import chess.engine
import time
import os

def logic_white():
    engine = chess.engine.SimpleEngine.popen_uci("C:\\Users\\Admin\\Desktop\\sf.exe")
    board = chess.Board()

    turn = True  # True - white False - black
    while True:
        chess.engine.turn = turn # This isn't working
        result_engine = engine.play(board,chess.engine.Limit(time=0.1))
        print(result_engine)

        res = input("Enter your enemie's move: ")
        move = chess.Move.from_uci(res)

        board.push(move)
        turn = not turn
        time.sleep(0.5)

def logic_black():
    engine = chess.engine.SimpleEngine.popen_uci("C:\\Users\\Admin\\Desktop\\sf.exe")
    board = chess.Board()

    turn = True # True - white False - black
    while True:
        chess.engine.turn = turn # This isn't working

        res = input("Enter your enemie's move: ")
        move = chess.Move.from_uci(res) #Inputting the enemy move and putting in on the virtual board
        board.push(move)

        result_engine = engine.play(board,chess.engine.Limit(time=0.1)) #Calculating best move to respond
        print(result_engine)
        board.push(result_engine) #Push the engine's move to the virtual board

        turn = not turn # Inverting turn, so turns can change from black to white, etc.
        time.sleep(0.5)       

def find_side():
    if(input("Enter your team(1-black 2-white):")) == 1:
        logic_black()
    else:
        logic_white()

Python's input function returns a string, so it will never be equal to the integer 1. As such, the code will always go into the else block. Python 的输入函数返回一个字符串,因此它永远不会等于整数 1。因此,代码将始终进入 else 块。 To fix this, either convert the input to an integer or compare it to '1'.要解决此问题,请将输入转换为整数或将其与“1”进行比较。

def find_side():
    if int(input("Enter your team(1-black 2-white):")) == 1:
        logic_black()
    else:
        logic_white()

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

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