Hi,

I have written the program below as an exercise from a book I am working my way through.

Objective from book:
Write a character creator program for a role-playing-game. The player should be given a pool of 30 points to spend on four attributes: strength, health, wisdom and dexterity. The player should be able to spend points from the pool on any attribute and should be also be able to take points from an attribute and put them back in the pool.

Although the program meets the aim of the exercise set out in the book , there are a couple of things I am not happy with!

1. I am sure I have written far more code than required. Where could I have made some shorcuts?

2. Should the user enter a value greater than what is available, the program kicks the user all the way back to the main menu. How could I tidy this up to just loop round to ask the user to try a new value?

choice = None

# Set max number of available points
POINTS_POOL = 30

# store attribute values
attributes = [["Strength", 0], ["Health", 0], ["Wisdom", 0], ["Dexterity", 0]]
strength = attributes[0]
health = attributes[1]
wisdom = attributes[2]
dexterity = attributes[3]
available_points = 30
used_points = 0
attribute_value = ""

while choice != "0":
    print \
          """
          -----------------
          Character Creator
          -----------------

          0 - Exit
          1 - Show Character Attributes
          2 - Set Character Attributes
          3 - Reset Character Attributes

          """
    choice = raw_input("Choice: ")
    print

    # exit option
    if choice == "0":
        print "Good bye."

    # show attributes option
    elif choice == "1":
        print "Your attributes are as follows:\n"
        print "\t",strength[0], strength[1]
        print "\t",health[0], health[1]
        print "\t",wisdom[0], wisdom[1]
        print "\t",dexterity[0], dexterity[1]
        print "\nYou have",available_points,"points available."
   
    # edit attributes option
    elif choice == "2":
        # set strength attribute
        print "\nYou have",strength[1] + available_points,"points available."
        attribute_value = int(raw_input("How much would you like to assign to strength?: "))
        if attribute_value > (strength[1] + available_points):
            print "Error - You do not have that many points available!\n"
            print "Please reset the character or assign a value equal\nto or lower than the avaialble points."
            continue
        strength[1] = attribute_value
        used_points = strength[1] + health[1] + wisdom[1] + dexterity[1]
        available_points = POINTS_POOL - used_points

        # set health attribute
        print "\nYou have",health[1] + available_points,"points available."
        attribute_value = int(raw_input("How much would you like to assign to health?: "))
        if attribute_value > (health[1] + available_points):
            print "Error - You do not have that many points available!\n"
            print "Please reset the character or assign a value equal\nto or lower than the avaialble points."
            continue
        health[1] = attribute_value
        used_points = strength[1] + health[1] + wisdom[1] + dexterity[1]
        available_points = POINTS_POOL - used_points

        # set wisdom attribute
        print "\nYou have",wisdom[1] + available_points,"points available."
        attribute_value = int(raw_input("How much would you like to assign to wisdom?: "))
        if attribute_value > (wisdom[1] + available_points):
            print "Error - You do not have that many points available!\n"
            print "Please reset the character or assign a value equal\nto or lower than the avaialble points."
            continue
        wisdom[1] = attribute_value
        used_points = strength[1] + health[1] + wisdom[1] + dexterity[1]
        available_points = POINTS_POOL - used_points

        # set dexterity attribute
        print "\nYou have",dexterity[1] + available_points,"points available."
        attribute_value = int(raw_input("How much would you like to assign to dexterity?: "))
        if attribute_value > (dexterity[1] + available_points):
            print "Error - You do not have that many points available!\n"
            print "Please reset the character or assign a value equal\nto or lower than the avaialble points."
            continue
        dexterity[1] = attribute_value
        used_points = strength[1] + health[1] + wisdom[1] + dexterity[1]
        available_points = POINTS_POOL - used_points

        # print amount of unused points
        print "\nYou have",available_points,"unused points."

    # reset attributes option
    elif choice == "3":
        strength[1] = 0
        health[1] = 0
        wisdom[1] = 0
        dexterity[1] = 0
        used_points = strength[1] + health[1] + wisdom[1] + dexterity[1]
        available_points = POINTS_POOL - used_points
        print "Attributes have been reset."
       
    # some unknown choice
    else:
        print "Sorry, but" ,choice, "is not a valid choice."

--
Best Regards

Jon Moore
_______________________________________________
Tutor maillist  -  Tutor@python.org
http://mail.python.org/mailman/listinfo/tutor

Reply via email to