Terry Reedy wrote:
Never saw this specific game. Some suggestions on additional factoring out of duplicate code.


def next_page(this_page):
 print "\n"
 if this_page == 0:
    page = 0
    return


The following elif switch can be replaced by calling a selection from a list of functions:

[None, page1, pag2, ... page57][this_page]()


 elif this_page == 1:
    page1()
    return
 elif this_page == 2:
    page2()
    return

...

 elif this_page == 57:
    page57()
    return


Also, a chose3 function to complement your chose (chose2) function would avoid repeating the choose-from-3 code used on multiple pages.

Terry J. Reedy

This is what I love about this list. Where else is someone going to look at 1200+ lines of code and give you useful advice?! ;) Very cool. (Thanks Terry!)



While we're making suggestions, you might consider writing dice_roll as: def dice_roll(num, sides): return sum(random.randrange(sides) for _ in range(num)) + num for Python 2.4 or def dice_roll(num, sides): return sum([random.randrange(sides) for _ in range(num)]) + num for Python 2.3.

You also might consider writing all the pageX methods in a class, so all your globals can be accessed through self, e.g.:

class Game(object):
    def __init__(self):
        ...
        self.page = 1
        self.computer_request = 0
        ...

    def page2():
        print ...
        if self.computer_request == 1:
            new_clone(45)
        else:
            new_clone(32)
        ...

You could then have your class implement the iteration protocol:

    def __iter__(self):
        try:
            while True:
                self.old_page = self.page
                yield getattr(self, "page%i" % page)
        except AttributeError:
            raise StopIteration

And then your main could look something like:

    def main(args):
       ...
       instructions()
       more()
       character()
       more()
       for page_func in Game():
           page_func()
           print "-"*79

Anyway, cool stuff.  Thanks for sharing!

Steve
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to