繁体   English   中英

在连接四个python游戏中的玩家之间交替

[英]Alternating between players in a connect four python game

我目前正在编写一个函数来在Python3中玩Connect Four。 我在很多方面都取得了不错的进展,但是在两名球员之间交替时遇到了麻烦。

我想做的是运行一个函数,该函数会将筹码放置在当前玩家的适当位置,即playturn(curr)。 所以我想说的是,虽然没有平局,没有赢家,但这场比赛将继续进行,并在两名玩家之间交替进行。

如果是玩家1的回合,则curr=1 ;如果是玩家2的回合,则curr=2

我当前的代码不起作用,因为如果没有平局或没有获胜者,则不允许我在每个回合之后在玩家之间切换。 我的逻辑是,如果curr=1最初为1,那么在第一步之后我将必须设置curr=2 然后,当curr=2 ,我必须将curr equal切换回1。在下面的代码中, checkforwinnercheckfortie是两个函数,如果没有获胜者并且没有平局,它们将返回False。 playturn(curr)会将筹码放置在正确的列中,具体取决于Player1或Player2选择的列。

curr=1
while checkforwinner==False and checkfortie==False:
    if curr==1:
        curr==2
        print(playturn(curr))
    if curr==2:
        curr==1
        print(playturn(curr))

有人可以解释为什么此代码不起作用以及如何解决该问题吗?

curr==2是一个比较。 您可能需要curr=2 第二个if应该是elif

有几种方法可以使这个更好!

为了使原始代码正常工作,应使用jspcal的建议将比较运算符( == )转换为赋值运算符( = )。

您还需要使用elif进行第二次比较,否则每个循环将播放器切换两次。

curr=1
while not (checkforwinner() or checkfortie()):
    if curr==1:
        curr=2
        print(playturn(curr))
    elif curr==2:
        curr=1
        print(playturn(curr))

您还可以清理一下代码:

def switch_player(current_player):
    if current_player == 1:
        return 2
    elif current_player == 2:
        return 1

while not (checkforwinner() or checkfortie()):
    print(playerturn(curr))
    curr = switch_player(curr)

您可能使用的最新版本是最短的,但较难阅读:

while not (checkforwinner() or checkfortie()):
    print(playerturn(curr))
    curr = 1 if curr == 2 else 2

如果checkforwinnercheckfortie是函数,则需要在它们后面加上括号:

while checkforwinner()==False and checkfortie()==False:

另外,正如@jspcal所指出的那样,您希望使用单个“ =”分配值,并且仅将“ ==”用于布尔比较。

暂无
暂无

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

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