[Tutor] Python - RPG Combat System

bob gailer bgailer at gmail.com
Sat Jul 31 19:51:26 CEST 2010


On 7/30/2010 10:49 PM, Jason MacFiggen wrote:
> what can I do instead of writing print so many times?
> import random
>     my_hp = 50
>     mo_hp = 50
>     my_dmg = random.randrange(1, 20)
>     mo_dmg = random.randrange(1, 20)
>     while True:
>         if mo_hp < 0:
>             print "The Lich King has been slain!"
>         elif my_hp < 0:
>             print "You have been slain by the Lich King!"
>         if mo_hp <= 0:
>             break
>         elif my_hp <= 0:
>             break
>         else:
>             print "Menu Selections: "
>             print "1 - Attack"
>             print "2 - Defend"
>             print
>             choice = input ("Enter your selection. ")
>             choice = float(choice)
>             print
>         if choice == 1:
>             mo_hp = mo_hp - my_dmg
>             print "The Lich King is at ", mo_hp, "Hit Points"
>             print "You did ", my_dmg, "damage!"
>             print
>             my_hp = my_hp - mo_dmg
>             print "I was attacked by the lk for ", mo_dmg," damage!"
>             print "My Hit Points are ", my_hp
>             print
>         elif choice == 2:
>             mo_hp = mo_hp - my_dmg / 2
>             print "The Lich King is at", mo_hp, "Hit Points"
>             print "you did ", my_dmg / 2, "damage!"
>             print
>             my_hp = my_hp - mo_dmg
>             print "I was attacked by the lk for ", mo_dmg," damage!"
>             print "My Hit Points are ", my_hp
>             print

Most of the statements in each choice block are identical. Factor them 
out, giving:

         if choice == 1:
             mo_hp = mo_hp - my_dmg
             print "you did ", my_dmg /, "damage!"
         elif choice == 2:
             mo_hp = mo_hp - my_dmg / 2
             print "you did ", my_dmg / 2, "damage!"
         print "The Lich King is at", mo_hp, "Hit Points"
         my_hp = my_hp - mo_dmg
         print "You did ", my_dmg, "damage!"
         print
         print "I was attacked by the lk for ", mo_dmg," damage!"
         print "My Hit Points are ", my_hp
         print

You could (better) move these statements into a function, passing 1 or 2 
as the divisor for my_dmg and returning the updated values for my_ho and 
my_hp.

def update(factor):
     print "The Lich King is at", mo_hp, "Hit Points"
     print "you did ", my_dmg / factor, "damage!"
     print
     print "I was attacked by the lk for ", mo_dmg," damage!"
     print "My Hit Points are ", my_hp
     print
     return mo_hp - my_dmg / factor, my_hp - mo_dmg
...
         if choice == 1:
             mo_hp, my_hp = update(1)
         elif choice == 2:
             mo_hp, my_hp = update(2)

-- 
Bob Gailer
919-636-4239
Chapel Hill NC



More information about the Tutor mailing list