Python中的Connect4不会落入电路板中

2024-09-30 22:10:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python编写Connect4。我的问题是player_-one和player_-two的功能似乎不起作用,所以在要求player提供输入后,no-part会掉到板上。我还想知道,我的代码是否返回后,球员已下降董事会是正确的;我怀疑我现在的代码没有返回用玩家的棋子更新过的棋盘,但由于是新的,我不知道该怎么办

请看一看

def field(field):
    for w in range(14):
        if w % 2 == 0:
            usable_w = int(w/2)
            for h in range(15):
                if h % 2 == 0:
                    usable_h = int(h/2)
                    if h != 14:
                        print(field[usable_h][usable_w], end="")
                    else:
                        print(" ")
                else:
                    print("|", end="")
        else:
            print("_"*13)


PlayField = [[" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "],
             [" ", " ", " ", " ", " ", " ", " "]]
field(PlayField)


def player_one(field):
    MoveColumn = int(input("Enter the column 1 - 7\n"))
    MoveRow = 6
    for row in PlayField:
        if MoveColumn >= 1 and MoveColumn <= 7:
            if PlayField[MoveColumn-1][MoveRow] == " ":
                    PlayField[MoveColumn-1][MoveRow] = "X"
                    break
            MoveRow -= 1
            return field(PlayField)
        else:
            print("Column outside range, please enter valid move")

def player_two(field):
    MoveColumn = int(input("Enter the column 1 - 7\n"))
    MoveRow = 6
    for row in PlayField:
        if MoveColumn >= 1 and MoveColumn <= 7:
            if PlayField[MoveColumn-1][MoveRow] == " ":
                    PlayField[MoveColumn-1][MoveRow] = "O"
                    break
            MoveRow -= 1
            return field(PlayField)
        else:
            print("Column outside range, please enter valid move")

def launch_play():
    while True:
        Player = 1
        print("Player's turn", Player)
        player_one(field)
        player_two(field)

launch_play()


Tags: infieldforifdefrangeoneelse
2条回答

嗯,您的player_...函数包含合适的语句,但顺序不合适;由于它们在全局PlayField上运行,因此返回它是毫无意义的。除此之外,它还有两个几乎相同的函数。重新排列的变体,其中播放器1和播放器2之间的唯一差异作为参数传递(而不是无用的field),正如您所期望的那样工作:

def player(xo):
    while (MoveColumn := int(input("Enter the column 1 - 7\n"))) < 1 or \
                                                      MoveColumn > 7:
        print("Column outside range, please enter valid move")
    MoveRow = 6
    for row in PlayField:
        if PlayField[MoveColumn-1][MoveRow] == " ":
            PlayField[MoveColumn-1][MoveRow] = xo
            field(PlayField)
            break
        MoveRow -= 1

launch_play循环中,现在可以调用

        player('X')
        player('O')

现在,您可以通过检查游戏何时结束来完成程序

我提出了两个解决方案(在你修改代码之前)来防止玩家的回合发生变化,但这两个方案都不起作用:

def player(xo):
    while MoveColumn := int(input("Enter the column 1 - 7\n")):
    MoveRow = 6
    for row in PlayField:
        if PlayField[MoveColumn-1][MoveRow] == " ":
            PlayField[MoveColumn-1][MoveRow] = xo
            field(PlayField)
            break
            Return True
        MoveRow -= 1
    else:
       print("Column outside range, please enter valid move")
       Return False

def launch_play():
    while True:
        Player = 'X'
        print("Player's turn", Player)
        player('X')
        Player = '0'
        print("Player's turn", Player)
        player('0')

launch_play()

另一种解决方案是在播放器函数中引入播放器变量(也不起作用):

 def player(xo):
    while MoveColumn := int(input("Enter the column 1 - 7\n")):
    MoveRow = 6
    Player = 'X'
    for row in PlayField:
        if PlayField[MoveColumn-1][MoveRow] == " ":
            PlayField[MoveColumn-1][MoveRow] = xo
            field(PlayField)
            break
        MoveRow -= 1
        Player = '0'
    else:
       print("Column outside range, please enter valid move")

相关问题 更多 >