如何为多个玩家的回合创建循环?
我正在尝试让这个循环正常工作,但它就是不行。任何帮助都会非常感激。
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