【问题标题】:How to make the dice game compare scores between other players?如何让骰子游戏比较其他玩家之间的分数?
【发布时间】:2020-08-30 06:22:05
【问题描述】:

我正在创建一个骰子游戏。我被卡住了,我希望游戏比较每个玩家的滚动输出roll = randint(1, 6),所以得分最高的玩家获胜。但是,我真的不知道该怎么做。

from random import randint

def main():
    player = int(input('How many players> ')) 
    step = 1
    player += 1
    player_dict = {}

    for pl in range(1, player, step):
        player_name = input(f'Player {str(pl)} name> ') # Get players name from user input
        player_dict[pl] = player_name

    for x in player_dict:
        roll_dice(player_dict[x])

def roll_dice(player_name):
    start_rolling = input(f'{player_name} roll dice? y/n> ')
    if start_rolling == 'y' or start_rolling == 'Y':
        roll = randint(1, 6)
        print(roll)

    return roll_dice

【问题讨论】:

  • 您打印卷,但在 roll_dice() 完成后您不保留值的副本,因此您可能希望查看函数返回值和某种数据结构以保持得分(如字典)。一旦你获得了所有的点数,你就可以想出一种方法来决定获胜的点数是什么,并打印一些关于它的消息。

标签: python comparison dice highest


【解决方案1】:
from random import randint


def main():
    player = int(input('How many players> ')) 
    step = 1
    player += 1
    player_dict = {}
    scores_dict = {}
    
    for pl in range(1, player, step):
        player_name = input(f'Player {str(pl)} name> ') # Get players name from user input
        player_dict[pl] = player_name

    for x in player_dict:
        score = roll_dice(player_dict[x])
        scores_dict[player_dict[x]] = score


    highest_score = max(scores_dict, key=scores_dict.get)
    sorted_scores = {k: v for k, v in sorted(scores_dict.items(), key=lambda item: item[1], reverse=True)}
    print('----------Results------------')
    [print(f'Position {i+1}: {key} with a roll of {value}') for i, (key, value) in enumerate(sorted_scores.items())]
    print('----------Winner-------------')
    print(f'{highest_score} wins')

def roll_dice(player_name):
    start_rolling = input(f'{player_name} roll dice? y/n> ')
    if start_rolling == 'y' or start_rolling == 'Y':
        roll = randint(1, 6)
        print(f'{player_name} rolls a {roll}')
        return roll
    return

if __name__ == '__main__':
    main()

【讨论】:

  • 其实我是想比较每个玩家的分数。然后,假设这个球员的名字是迈克。因此,在游戏结束时,它会打印出类似“5th: Mike”的内容。它也会根据其他玩家的分数对他们做同样的事情。
  • 代码应该被重构为一个单独的函数来计算分数,考虑到平局。然而,上述方法是快速而肮脏的方式来获取您所要求的内容。
【解决方案2】:

看看下面这个例子。

from random import randint


def main():
    players_count = int(input('How many players> '))
    player_dict = {}

    for pl in range(players_count):
        player_name = input(f'Player {str(pl + 1)} name> ')  # Get players name from user input
        player_dict[player_name] = 0  # Initialize all players scores to 0

    for player_name in player_dict:
        player_dict[player_name] = roll_dice(player_name)  # Update score of each player

    print(sorted(player_dict.items(), key=lambda item: item[1]))  # Display sorted scores 


def roll_dice(player_name):
    start_rolling = input(f'{player_name} roll dice? y/n> ')
    if start_rolling == 'y' or start_rolling == 'Y':
        roll = randint(1, 6)
    return roll
main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-12
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多