如何为多个玩家的回合创建循环?

-2 投票
3 回答
10404 浏览
提问于 2025-04-17 23:12

我正在尝试让这个循环正常工作,但它就是不行。任何帮助都会非常感激。

while player1_score < 100 and player2_score < 100 and player3_score < 100 and player4_score < 100:    
    while player_turn != playerholder:
        dice_rolling()
        scoring()
        score_awarding()
        player_turn = player_turn + 1
    if player_turn == playerholder:
        player_turn == 1

我想做的是获取在场的玩家人数(playerholder),然后让玩家的回合在这个人数范围内进行,也就是说,重复进行,直到有人得分达到100分或更多。如果你需要更多代码,请随时问我 :) 提前谢谢你。

编辑:大家似乎对我在问什么感到困惑,所以我会尝试更详细地解释。

这个游戏有2到4个玩家,他们的目标是得分达到100分或更多。因为有多个玩家,我想用一个重复的结构来高效地多次使用我创建的函数。根据目前的代码,玩家的得分是正常的,直到最后一个玩家时,代码完全停止,什么都不显示。我希望代码能无限重复,直到达到所需的分数,也就是说,它会不断循环通过玩家,没有错误。我尝试了多次不同的循环,但就是无法让它工作。希望这样能让大家更清楚一些。抱歉我的问题不够清晰/有条理,我对StackOverflow还比较陌生。

编辑:问题已经解决

3 个回答

0

你可以试试用列表结构来解决这个问题。

如果有4个玩家,它的样子会是这样的:

turns = [0,1,2,3,4,0,1,2,3,4]

#this would add another turn for player 0, to remove you just use del
turns.append(0)


#This would remove a winner from your turn stack while preserving the order
for i in turns:
    if i ==4:
        del i

#You could also use a dictionary if you don't like list indicies or numbers:
Players = {"blue":3, red":4, "green":2, "orange":1}

turn = [4,2,1,3,4,2,1,3]

#If there is also a maximum number of turns, you can have that hard coded also:
for i in range(max):
    turn.append(1)
    turn.append(2)
    turn.append(3)
    turn.append(4)

老实说,我不是很明白你的问题,不过希望这个能部分或完全解答你的疑问。

2

顺便提一下,你应该把你的玩家放在一个列表里,然后一个一个地让他们轮流行动。可以像这样做:

players = [player1,player2,player3,player4]

for player in players:
    if player.score >= 100: win(player)
    dice_rolling()
    player.score += scoring()

不过,这样做的前提是你的代码里得有一个叫做 class Player 的东西(你应该有的)。

class Player(object):
    def __init__(self,name):
        self.name = name
        self.score = 0
    # what else does a Player do?

其实你也可以考虑创建一个 Game 类!

class Game(object):
    def __init__(self,players):
        self.players = players # a list of players
        self.running = False
    def dice_rolling(self):
        diceroll = sum(random.randint(1,6) for _ in range(2))
    def scoring(self):
        return score # I don't know how you're doing this so...
    def win(self,player):
        print("{} wins!".format(player.name))
    def run(self):
        self.running = True
        while self.running:
            for player in self.players:
                roll = dice_rolling()
                player.score += scoring()
                if player.score >= 100:
                    self.running = False
                    win(player)

Game().run()
0

你的代码可能没有按预期工作,因为你没有把 1 赋值给 player_turn,而是做了其他的事情:

player_turn == 1

其实应该是这样:

player_turn = 1

撰写回答