Есть ли способ создать многопользовательскую игру в кости, в которой игроки ходят по очереди и подсчитывают счета? - PullRequest
3 голосов
/ 13 мая 2019

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

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

playerPoints = {}
toRoll = ""
minPlayers = 2
maxPlayers = 4
winner = 100
double1 = 25

def players(numberOfPlayers):
    numberOfPlayers = 0
    while numberOfPlayers not in (str(i) for i in range (minPlayers,maxPlayers)):
        numberOfPlayers = int(numberOfPlayers)
        for i in range(numberOfPlayers):
            playerPoints["score{}".format(i+1)] = 0
        return numberOfPlayers

def diceroll():
    die1 = randint(1,6)
    die2 = randint(1,6)
    return die1, die2
    roll = 0
    while roll not in (str(i) for i in toRoll):
        roll = input("Press enter to roll both dice")
        if roll == toRoll:
            print(str(die1) + " and " + str(die2))
            break

Я хочу, чтобы код продолжался, однако я застрял в этой точке, когда код только спрашивает, сколько игроков там, а затем прерывается.this is how the code

Я вызвал функцию, выполнив:

numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()

1 Ответ

1 голос
/ 14 мая 2019

Возможное решение вашей проблемы

В вашем коде есть все виды операторов return, которые делают невозможным выполнение некоторого кода. Как и в функции diceroll, где вы возвращаете die1 и die2 in:

return die1, die2

Код после этой строки никогда не выполняется, потому что функция возвращает некоторые значения.

Вы говорите, что выполняете функцию следующим образом:

numberOfPlayers = input("How many players are there? (2-4)")
players(numberOfPlayers)
diceroll(die1, die2)
roll()

Однако функция diceroll принимает нулевые параметры, в то время как вы задаете два (die1 и die2), это не сработает. Также я не вижу функцию roll в вашем коде, так что это также даст вам ошибку.

Как бы я это сделал

Итак, я знаю, что StackOverflow - это не то место, где мы пишем код для вас. Но так как в вашем коде было много всего, что я нашел странным. Я переписал код так, как я бы это сделал:

import random

playerPoints = []
minPlayers = 2
players = 0
maxscore = 100
amountOfDice = 2
gameRound = 0

def setPlayers():
    while True:
        players = input("How many players are playing?\n")
        if players.isdigit():
            players = int(players)
            if minPlayers <= players:
                for i in range(players):
                    playerPoints.append(0)
                return players

def diceroll(player, amountOfDice):
    throw = 0
    print("\tPlayer {0}s turn:".format(player + 1))
    for i in range(amountOfDice):
        die = random.randint(1, 6)
        print("\t\tPlayer {0} has thrown die {1} which landed on {2}".format(player + 1, i + 1, die))
        throw += die

    playerPoints[player] += throw
    print("\tPlayer {0}s score is now: {1}".format(player + 1, playerPoints[player]))
    return throw

def checkWin(maxscore):
    for player in range(players):
        if (playerPoints[player] >= maxscore):
            print("Player {0} wins!".format(player + 1))
            return True

    return False


if __name__ == "__main__":
    players = setPlayers()
    while True:
        gameRound += 1
        print("Round: {0}".format(gameRound))
        for i in range(players):
            diceroll(i, amountOfDice)
        if (checkWin(maxscore)):
            break

Теперь, во-первых, я снял некоторые ограничения в функции players (и изменил имя на setPlayers). В вашем коде не было проверки, является ли введенное число числом, что может привести к ошибке. Я также снял ограничение на 4 игрока, потому что код работает с каждой суммой (если 2 или выше конечно).

Функция diceroll теперь принимает игрока, который будет бросать в качестве аргумента, а также количество выпавших кубиков.

Я также добавил функцию checkWin, которая проверяет, выиграл ли игрок. В качестве аргумента используется максимальная оценка.

Теперь это, вероятно, не самый быстрый код, однако я думаю, что он понятен. Если у вас есть какие-либо вопросы по этому поводу, не стесняйтесь спрашивать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...