为了账号安全,请及时绑定邮箱和手机立即绑定

结束一个while循环

结束一个while循环

Go
繁花如伊 2021-07-08 10:01:30
我目前正在用 Python 3.6 编写骰子游戏的代码我知道我的编码在这方面有点偏差,但是,我真的只是想知道如何开始我的 while 循环。游戏说明如下...人类玩家与计算机对战。玩家 1 掷骰子,直到他们获胜、决定保持或掷出 1。玩家 2 也是如此。他们轮流掷两个骰子,骰子的总数相加,除非掷出 1。如果掷出一个 1,则不会增加分数,轮到下一个人了。如果掷出两个 1,您将失去所有积分,然后轮到下一个人。第一个得分为 100 的玩家赢得游戏。我的游戏运行良好,直到玩家 1 和玩家 2 都击中“y”以背靠背。然后游戏停止在玩家之间切换,直到再次击中“n”以不保持。知道为什么吗?有人告诉我,我需要变量来决定轮到谁,但我不确定如何将它们合并到我的代码中。任何帮助,将不胜感激。
查看完整描述

3 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

使用 dict 来记录每个玩家名称的分数,切换一个turn持有当前掷骰子的玩家。


实现了一些逻辑,即何时turn从一种更改为另一种:


import random


def score(players):

    for k in players:

        print("{} has {} points".format(k,players[k]))


def hold(player):

    if input("Does {} want to hold? [y or anything]".format(player)).lower().strip() == "y":

        return "y"

    return "n"



def main():


    dice = range(1,7)

    players = {"p1":0, "p2":0}

    turn = ""

    change_player = "y"


    print("Welcome to the Two Dice Pig Game. You are Player 1!")


    while all(x < 100 for x in players.values()):

        # initially changePlayer is 

        if change_player == "y":

            # print both scores on player changed

            score(players)

            turn = "p1" if turn != "p1" else "p2"


        dice1, dice2 = random.choices(dice,k=2)

        print("{} threw {} and {} for a total of {}".format(turn,d1,d2,d1+d2))


        if dice1 + dice2 == 2:

            players[turn] = 0

            print("Two 1 - you're done for now. Your points go back to 0.")

            change_player = "y"

        elif dice1 == 1 or dice2 == 1:

            print("One 1 - you're done for now.")

            change_player  = "y"

        else:

            # only case where we need to add values and print new score

            players[turn] += dice1 + dice2

            print("Your score: {}".format(players[turn]))

            if turn == "p1":

                change_player = hold(turn)

            else:

                change_player = "n" # computer is greedy, never stops


    winner, points = max(players.items(),key=lambda x: x[1])

    print("The winner is {} with {} points.".format(winner,points))



main() 

输出:


Welcome to the Two Dice Pig Game. You are Player 1!

p1 has 0 points

p2 has 0 points

p1 threw 5 and 1 for a total of 6

One 1 - you're done for now.

p1 has 0 points

p2 has 0 points

p2 threw 3 and 6 for a total of 9

Your score: 9

p2 threw 6 and 2 for a total of 8

Your score: 17

p2 threw 4 and 1 for a total of 5

One 1 - you're done for now.

p1 has 0 points

p2 has 17 points

p1 threw 4 and 5 for a total of 9

Your score: 9

Does p1 want to hold? [y or anything]

p1 threw 2 and 6 for a total of 8

Your score: 17

Does p1 want to hold? [y or anything]

p1 threw 4 and 6 for a total of 10

Your score: 27


[snipp]


One 1 - you're done for now.

p1 has 91 points

p2 has 51 points

p1 threw 6 and 4 for a total of 10

Your score: 101

Does p1 want to hold? [y or anything]

The winner is p1 with 101 points. 


查看完整回答
反对 回复 2021-07-13
?
MM们

TA贡献1886条经验 获得超2个赞

您可能希望通过执行以下操作来简化代码:


# Keep track of whose turn it is

player = 1


# Keep a dictionary of scores for each player (1 or 2)

scores = {1: 0, 2: 0}

choice = 'n'


# While neither player has > 100

while max(d.values()) < 100:


    # Roll until current player decides to keep roll

    while choice == 'n':

        print('Player', player, 'turn')

        roll = random.randrange(1,7) + random.randrange(1,7)

        print('You rolled', roll)

        choice = input('Keep roll? y/n')


    # Increment that player's score

    scores[player] += roll

    choice = 'n'


    # Change to other player

    player = (player % 2) + 1


查看完整回答
反对 回复 2021-07-13
  • 3 回答
  • 0 关注
  • 223 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信