首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >10面掷骰子游戏

10面掷骰子游戏
EN

Code Review用户
提问于 2015-02-14 15:27:15
回答 1查看 862关注 0票数 6

我的代码是10面骰子滚动游戏的代码。有2名球员以50分开始,然后他们都掷骰子,并获得1-10之间的随机得分。得分最高的球员得到的是从分数中扣除的滚球之间的差(50分),而输家则得到加在分数上的滚球之间的差。要赢得这场比赛,你必须达到0或以下。

代码语言:javascript
复制
#Imported to help flow, and random to simulate dice rolls

print("Welcome to the dice rolling game.")
#Printed to make it more friendly to the user :)
time.sleep(1)

playernames=[]
#Add player's names to a list
playernames.append(input("\nWhat is player 1's name?"))#.append is used to add multiple names to list
playernames.append(input("\nWhat is player 2's name?"))
time.sleep(1)
#Prints players names from the list

print("\nPlayer 1:",playernames[0])
print("Player 2:",playernames[1])
input("\nPress enter to begin: ")


dicelist=[0,0]

dicelist[0]=random.randint(1,10)
dicelist[1]=random.randint(1,10)


for i in range(0,2):
    print(playernames[i],"rolls a",dicelist[i])
diceDifference=abs(dicelist[0]-dicelist[1])


score0=20
score1=20
while True:
    if dicelist[0]>dicelist[1]:
            print("\nPlayer 1 wins")
            time.sleep(1)
            print("\nPlayer 2 loses",diceDifference,"points")
            print("Player 2 gains",diceDifference,"points")

            print("player 1:",score0-diceDifference)
            print("player 2:",score1+diceDifference)
score0==0
exit

elif dicelist[1]>dicelist[2]:
print("\nPlayer 2 wins")
time.sleep(1)
print("\nPlayer 2 loses",diceDifference,"points")
print("\nPlayer 1 gains",diceDifference,"points")
print("player 1:",score0+diceDifference)
print("player 2:",score1-diceDifference)
score1==0
exit

else:
print("It's a draw")
time.sleep(1)
print("No change in score")

print("The score is: ","\nPlayer 1:",score0,"\nPlayer 2:",score1)
time.sleep(1)
EN

回答 1

Code Review用户

发布于 2015-02-14 16:54:27

您的代码中有相当多的重复-所有的东西都写了两次,一次给每个玩家。这意味着,如果你想改变逻辑,你必须在两个地方改变一切,而增加更多的玩家是一个巨大的痛苦。

相反,我建议使用列表来保存多个项目,允许您有任意数量的播放器(从playernamesdicelist开始,然后似乎放弃了!)

你也应该计算出“魔术数字”,比如玩家的数量,骰子上的脸数和开始得分。例如:

代码语言:javascript
复制
import random

# Configuration
PLAYERS = 2  # could be another input at the start
FACES = 10
START_SCORE = 20  # or 50?

# Initialisation
names = [input("\nWhat is player {}'s name?".format(x+1)) 
         for x in range(PLAYERS)]
scores = [START_SCORE for _ in range(PLAYERS)]

# Main game loop
while all(score > 0 for score in scores):
    print()

    # Calculate rolls 
    rolls = [random.randint(1, FACES) for _ in range(PLAYERS)]
    for name, roll in zip(names, rolls):
        print("{} rolled {}".format(name, roll))

    # Determine winning roll
    winning_roll = max(rolls)
    diffs = [winning_roll - roll for roll in rolls]

    # Update scores
    for index, name in enumerate(names):
        scores[index] += diffs[index]
        if diffs[index] == 0:
            print("{} won!".format(name))
            scores[index] -= sum(diffs)

    # Report progress
    for name, score in zip(names, scores):
        print("{} now has {} points".format(name, score))

# Who won?
print()
winning_score = min(scores)
for name, score in zip(names, scores):
    if score == winning_score:
        print("{} is the winner!".format(name))

注意使用zipenumerate清单理解有效地处理各种列表。

规则被稍加调整,以适应多个玩家--得分最高的球员从分数中减去所有差异的总和,而其他球员则只得到他们的差异。这对于两个玩家来说是一样的,但是你可以根据游戏的工作方式来调整这个逻辑。

与当前结构相比,一个重要的改进是将其实现为一组简短的、独立的函数,而不是一个长脚本。

票数 10
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/80528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档