Python数字不会随机化

时间:2014-06-21 14:31:50

标签: python

我一直在打一场格斗游戏,但伤害不会随机化。

from random import randint
import time
#playerHealth = 20 
#trollHealth = 10
#dragonHealth = 15
#playerDamage = randint(0,5)
#trollDamage = randint(0,4)
#dragonDamage = randint(0,7)
#slay = True
#######Variables.

#print("""Random fight""")




def fight(enemy):

    playerH = 20 
    trollH = 10
    dragonH = 15
    playerD = randint(0,5)
    trollD = randint(0,4)
    dragonD = randint(0,7)
    slay = True

    if enemy == "troll":
        enemyH = trollH
        enemyD = trollD
    elif enemy == "dragon":
        enemyH = dragonH
        enemyD = dragonD
    else:
        print("Invalid")

    print"You are fighting a ", enemy
    while slay:
        print"Your health:",playerH
        print"Enemy health:",enemyH
        time.sleep(1)

        #########When player is attacking###########################
        if playerD == 5 or playerD == 4:
            print"You deal",playerD,"damage points. A critical hit!"
            time.sleep(1)
            enemyH = enemyH - playerD
            print"The",enemy,"has",enemyH,"health points remaining."
            time.sleep(1)
        elif playerD == 0:
            print"You missed and deal 0 damage points."
            time.sleep(1)
            enemyH = enemyH - playerD
            print"The enemy has",enemyH,"health points remaining."
            time.sleep(1)
        else:
            print"You deal",playerD,"damage points."
            time.sleep(1)
            enemyH = enemyH - playerD
            print"The enemy has ", enemyH, "health points remaining."
            time.sleep(1)
        #############################################################

        ########When troll is attacking##############################
        if enemy == "troll":
            if enemyD == 4:
                print"The troll deals 4 damage points. A critical hit!"
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
            elif enemyD == 0:
                print"The troll missed and deals 0 damage points."
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
            else:
                print"The troll deals",enemyD,"damage points."
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
        ##############################################################

        ##########When dragon is attacking############################        
        if enemy == "dragon":
            if enemyD == 6 or enemyD == 7:
                print"The dragon deals",enemyD,"damage points. A critical hit!"
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
            elif enemyD == 0:
                print"The dragon missed deals 0 points of damage."
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
            else:
                print"The dragon deals",enemyD,"damage points."
                time.sleep(1)
                playerH = playerH - enemyD
                print"You have",playerH,"health points remaining."
                time.sleep(1)
        ###############################################################

        if enemyH == 0:
            slay = False
            print("You won the battle!")
        elif playerH == 0:
            slay = False
            print("You lost the battle. Better luck next time.")
##############################End of function##################################


#########Begining of game############################
enemyTest = True
print("Prepare yourself for battle.")
time.sleep(1)
while enemyTest:
    enemy = raw_input("Would you like to fight a 'dragon' or a 'troll'? ")
    enemy = enemy.lower()
    if enemy == "troll" or enemy == "dragon":
        enemyTest = False
    else:
        print("Invalid.")
        time.sleep(1)

if enemy == "troll":
    fight(enemy)
elif enemy == "dragon":
    fight(enemy)
else:
    print("Restart the program.")
    time.sleep(3)








#To fix:
#Enemy still attacks after death(test for death after each attack. Function?
#Damage doesn't vary
#Speed too fast at parts

在我希望它保持随机化伤害的功能中,所以我为每个角色设置了一个randint。然而,例如,让我们说我要打一场龙,战斗就会开始,如果玩家首先造成4点伤害并且龙首先造成2点伤害,那么他们在整场战斗中只会造成4点和2点伤害。这是为什么?我该如何解决?

提前感谢您提供的任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以在以下函数中指定randint值:

def fight(enemy):
    playerH = 20 
    trollH = 10
    dragonH = 15
    playerD = randint(0,5)
    trollD = randint(0,4)
    dragonD = randint(0,7)

import random
rand_value=   random.randint(0,10)

for i in range(5):
    print rand_value
2
2
2
2
2


for i in range(5):
    print random.randint(0,5)
2
1
3
2
5

然后输入while slay loop,以便该循环中的值永远不会改变。 您需要在循环中设置randint值。

答案 1 :(得分:0)

你用这一行选择伤害量:

 playerD = randint(0,5)

然后在之后的几行进入你的循环:

 while slay:

之后你永远不会再次设置伤害,因此它永远不会改变。

基本上,你在开始玩之前掷骰子,然后把它放在桌子上,每次你想要一个新的数字时都看一眼。您需要在游戏过程中将其拾取并再次滚动,即在循环内选择一个新的随机数。

我有点提醒this xkcd comic