我的代码是10面骰子滚动游戏的代码。有2名球员以50分开始,然后他们都掷骰子,并获得1-10之间的随机得分。得分最高的球员得到的是从分数中扣除的滚球之间的差(50分),而输家则得到加在分数上的滚球之间的差。要赢得这场比赛,你必须达到0或以下。
#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)发布于 2015-02-14 16:54:27
您的代码中有相当多的重复-所有的东西都写了两次,一次给每个玩家。这意味着,如果你想改变逻辑,你必须在两个地方改变一切,而增加更多的玩家是一个巨大的痛苦。
相反,我建议使用列表来保存多个项目,允许您有任意数量的播放器(从playernames和dicelist开始,然后似乎放弃了!)
你也应该计算出“魔术数字”,比如玩家的数量,骰子上的脸数和开始得分。例如:
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))注意使用zip、enumerate和清单理解有效地处理各种列表。
规则被稍加调整,以适应多个玩家--得分最高的球员从分数中减去所有差异的总和,而其他球员则只得到他们的差异。这对于两个玩家来说是一样的,但是你可以根据游戏的工作方式来调整这个逻辑。
与当前结构相比,一个重要的改进是将其实现为一组简短的、独立的函数,而不是一个长脚本。
https://codereview.stackexchange.com/questions/80528
复制相似问题