Игра в кости не работает с несколькими игроками - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать игру, в которой вы выбираете, сколько игроков будет, назовите этих игроков, а затем случайным образом выбирается один игрок.

Оттуда выбранный игрок выберет число от 1 до 10, на которое он НЕ ДОЛЖЕН приземлиться.

Затем кости кидаются, и если они выпадают на это число, все остальные выбирают бросок для него / нее.Если этого не произойдет, игра просто случайным образом выбирает другого игрока, и процесс начинается снова.

Проблема в том, что программа не проходит ту часть, где спрашивает, какой номер вы не хотите получить на .Это странно, так как работает нормально с одним человеком.

Вот полный код, вы ищете строку 23:

# Pass Or Dare

from random import randint
firsttry = True
def playerpicked(list):
    listwords = len(list)
    numpicked = randint(0, listwords - 1)
    userpicked = list[numpicked]
    return userpicked

while firsttry:
    try:
        playercount = int(input('How many players will there be?\n'))
    except ValueError:
        print("That isn't a number. Please enter a number without decimals.")
    else:
        firsttry = False
        playernames = [input("Name of Player {}: ".format(i)) for i in range(1, playercount + 1)]
        while True:
            playerturn = playerpicked(playernames)
            print("The Player picked is:",playerturn)
            while True:
                try:
                    darenum = int(input(playerturn + ", which number do you NOT want to land on?\n"))
                except ValueError:
                    print("Please enter a number.")
                else:
                    if darenum > 10 or darenum < 1:
                        print("Please enter a number between 1 and 10.\n")
                    else:
                        break
                    print("Okay. Rolling the dice...")
                    numpick = randint(1, 10)
                    print("The number chosen is " + str(numpick) + ".")
                    if numpick == darenum:
                        print("Whoops! The number you chose was the one that we landed on! Everyone agree on a dare for " + playerturn + "!\n\n")
                        input("Press Enter once " + playerturn + " has done a dare...\n")
                    else:
                        print(playerturn + " has escaped! Moving on to the next person.\n\n") 

Ответы [ 2 ]

0 голосов
/ 18 декабря 2018

Вот быстрый обзор алгоритма, проблема заключалась в том, что разрыв, который вы использовали при проверке, находился ли даренум между нужным диапазоном, приводил к повторному циклу и никогда не выходил оттуда.Кроме того, рекомендуется проверить свою структуру управления, потому что именно она и создала проблему.Наконец, я настоятельно рекомендую функцию выхода из вашей игры, потому что в какой-то момент она должна закончиться.Надеюсь, это поможет:

from random import randint

def playerpicked(list):
    listwords = len(list)
    numpicked = randint(0, listwords - 1)
    userpicked = list[numpicked]
    return userpicked

playercount = 0
while playercount < 1:
    try:
        playercount = int(input('How many players will there be?\n'))
    except ValueError:
        print("That isn't a number. Please enter a number without decimals.")

playernames = [input("Name of Player {}: ".format(i)) for i in range(1, playercount + 1)]
print("Press 0 while it's your turn to finish the game")
while True:
    playerturn = playerpicked(playernames)
    print("The Player picked is:",playerturn)
    darenum = -1
    while (darenum > 10 or darenum < 0):
        try:
            darenum = int(input(playerturn + ", which number do you NOT want to land on?\n"))
            if darenum > 10 or darenum < 1:
                print("Please enter a number between 1 and 10.\n")
        except ValueError:
            print("Please enter a number.")
    if darenum == 0:
        break
    print("Okay. Rolling the dice...")
    numpick = randint(1, 10)
    print("The number chosen is " + str(numpick) + ".")
    if numpick == darenum:
        print("Whoops! The number you chose was the one that we landed on! Everyone agree on a dare for " + playerturn + "!\n\n")
        input("Press Enter once " + playerturn + " has done a dare...\n")
    else:
        print(playerturn + " has escaped! Moving on to the next person.\n\n") 

print("Game Over")
0 голосов
/ 18 декабря 2018

Ваш исходный код с ошибками синализации (читайте комментарии к коду):

# Pass Or Dare

from random import randint
firsttry = True
def playerpicked(list):
    listwords = len(list)
    numpicked = randint(0, listwords - 1)
    userpicked = list[numpicked]
    return userpicked

while firsttry:
    try:
        playercount = int(input('How many players will there be?\n'))
    except ValueError:
        print("That isn't a number. Please enter a number without decimals.")
    else:
        firsttry = False
        playernames = [input("Name of Player {}: ".format(i)) for i in range(1, playercount + 1)]
        while True:
            playerturn = playerpicked(playernames)
            print("The Player picked is:",playerturn)
            while True:
                try:
                    darenum = int(input(playerturn + ", which number do you NOT want to land on?\n"))
                except ValueError:
                    print("Please enter a number.")
                else: #there is no if for this else
                    if darenum > 10 or darenum < 1:
                        print("Please enter a number between 1 and 10.\n")
                    else:
                        break #this break would break the while True above
                    print("Okay. Rolling the dice...")
                    numpick = randint(1, 10)
                    print("The number chosen is " + str(numpick) + ".")
                    if numpick == darenum:
                        print("Whoops! The number you chose was the one that we landed on! Everyone agree on a dare for " + playerturn + "!\n\n")
                        input("Press Enter once " + playerturn + " has done a dare...\n")
                    else:
                        print(playerturn + " has escaped! Moving on to the next person.\n\n") 
                        #there should be a break in here, otherwise the function would be stuck in the second while True

Исправлен код, изменяющий то, что я упоминал в комментариях выше:

# Pass Or Dare

from random import randint
firsttry = True
def playerpicked(list):
    listwords = len(list)
    numpicked = randint(0, listwords - 1)
    userpicked = list[numpicked]
    return userpicked

while firsttry:
    try:
        playercount = int(input('How many players will there be?\n'))
    except ValueError:
        print("That isn't a number. Please enter a number without decimals.")
    else:
        firsttry = False
        playernames = [input("Name of Player {}: ".format(i)) for i in range(1, playercount + 1)]
        while True:
            playerturn = playerpicked(playernames)
            print("The Player picked is:",playerturn)
            while True:
                try:
                    darenum = int(input(playerturn + ", which number do you NOT want to land on?\n"))
                except ValueError:
                    print("Please enter a number.")

                if darenum > 10 or darenum < 1:
                    print("Please enter a number between 1 and 10.\n")

                else:

                    print("Okay. Rolling the dice...")
                    numpick = randint(1, 10)
                    print("The number chosen is " + str(numpick) + ".")

                    if numpick == darenum:
                        print("Whoops! The number you chose was the one that we landed on! Everyone agree on a dare for " + playerturn + "!\n\n")
                        input("Press Enter once " + playerturn + " has done a dare...\n")

                    else:
                        print(playerturn + " has escaped! Moving on to the next person.\n\n")
                        break
...