Reputation: 1152
I'm making an rpg like game. Where the player and enemy takes turn fighting. The enemy and player both have a damage range [ex (4,10)] and it takes a random number from this range when they attack.
I have this function looping until one of the characters reach 0 HP. Only problem is that it only takes a random number for the first loop, then after that it uses that same number for the rest of the loops. How do I get a new random number for each new loop?
import time
import random
global myhp
myhp = 20
global mydmg
mydmg = random.randint(2,5)
mygold = 0
mystr = 2
def start():
print "Hello there."
myname = raw_input("What is your name? ")
print "Welcome %s, this is..." %myname
uname = myname.upper()
print "\t\t\tTHE ADVENTURES OF %s" %uname
choice0 = ''
allowed = ["y", "n"]
while choice0.lower() not in allowed:
choice0 = raw_input("\nWould you like to play the game? Y/N ")
choice0 = choice0.lower()
if choice0 == "y":
game1()
if choice0 == "n":
print "Alright, bye!"
def fightmode(name, hp, dmg, gold):
global myhp
print '\n\n\nYou are in a fight with %s' %name
print '%s has %sHP' %(name, hp)
while myhp > 0 and hp > 0:
print '\n\t1. Attack \n\t2. Guard \n\t3. Run away.'
opt1= ''
allowed = ["1", "2", "3"]
while opt1 not in allowed:
opt1 = raw_input("\nWhat will you do? ")
if opt1 == "1":
hp = hp - mydmg
myhp = myhp - dmg
print "You have inflicted %d damage on %s. %s's HP is %s" %(mydmg, name, name, hp)
print "%s attacked you and did %d damage. Your HP fell down to %s" %(name, dmg, myhp)
if opt1 == "2":
myhp = myhp + 5
print "You are now guarding yourself. Your HP is now %d" %myhp
myhp = myhp - dmg
print "%s attacked you and did %d damage. Your HP fell down to %s" %(name, dmg, myhp)
if myhp > 0 :
print"myhp"
if hp > 0 :
print"theirhp"
def fightmode0():
print """\n\nThis is your first fight. You have 3 seconds each turn
if you fail to make a move in 3 seconds, you will lose your turn.
By "Attacking", you inflict damage on the enemy\'s HP, get it down to 0 to defeat him.
If your HP reaches 0, you will be defeated.
By "Guarding", you will regain 10HP back, but that counts as your turn.
By defeating enemies, you gain gold Use gold to purchase upgrades
when you come across a shop.
You can choose to "Run Away", but you will only have a 1/10 chance of it being sucessful
"""
raw_input("\nPress any key to continue to battle")
fightmode("Scrawny Thug", 15, random.randint(1,5), 4)
def game1():
print "You wake up and find yourself locked in a room..."
print "You think you're kidnapped."
print "Yea, you're probably kidnapped."
print "You hear footsteps approaching the door..."
print "\n\t1. Remain in fetal position \n\t2. Attempt a sneak attack"
choice1 = ''
allowed = ["1", "2"]
while choice1 not in allowed:
choice1 = raw_input("\nWhat will you do? ")
print "The doorknob rattles..."
print "..."
print "..."
if choice1 == "1":
print '"Hey!"'
print '"Get up maggot!"'
print 'You see that the thug is small and scrawny'
print 'He grabs you by your hair and pulls you up'
print "\n\t1. Punch him in the face. \n\t2. Do nothing"
choice1_1 = ''
allowed = ["1", "2",]
while choice1_1 not in allowed:
choice1_1= raw_input("\nWhat will you do?? ")
if choice1_1 == "1":
print '\nYou punch the scrawny thug and he lets you go'
print '"You\'re going to pay for that."'
print '\n\t\t>>>>>>>>>>ENTERING FIGHT MODE'
fightmode0()
start()
Upvotes: 0
Views: 124
Reputation: 1192
Put dmg = random.randint(dmg_min, dmg_max)
inside the while
loop in the function fightmode
, so that it's recalculated each loop, and redefine the function to be:
def fightmode(name, hp, dmg_min, dmg_max, gold):
Upvotes: 1
Reputation: 142116
Just generate a new random number when needed:
Instead of:
fightmode("Scrawny Thug", 15, random.randint(1,5), 4)
Change this to:
fightmode("Scrawny Thug", 15, (1, 5), 4)
And change the function slightly:
def fightmode(name, hp, dmg_range, gold): # takes range as randint parameters
global myhp
print '\n\n\nYou are in a fight with %s' %name
print '%s has %sHP' %(name, hp)
while myhp > 0 and hp > 0:
dmg = random.randint(*dmg_range) # generate new each time
print '\n\t1. Attack \n\t2. Guard \n\t3. Run away.'
Upvotes: 0