| | |
Help me play-test my text adventure? (beginner)
![]() |
•
•
Join Date: Jul 2008
Posts: 6
Reputation:
Solved Threads: 0
Hi!
I just started poking around with Python recently, and I decided to do a text-adventure game project to practice some of the core concepts. Trying to think of ways to go about it, I stumbled on this DaniWeb post:
http://www.daniweb.com/forums/thread...t+rpg+tutorial
Gave me a lot of inspiration, and I took my main layout from that. Wonderful practice! So thanks to everyone who contributed to that thread. Hope you don't mind I borrowed some pieces of the code skeleton from there.
In any case, I'm about done with the adventure, but there are some minor (So far non-fatal) problems I've run into. The game is mostly playable, unless it has some errors I don't know about, which is more than likely.
I've sorted out most of the problems I've run into myself, but one thing I can't figure out is:
The "quit" option works just fine in the first few rooms. Then it starts screwing up a bit, looping once before quitting. I can't figure out where it starts to go screwy, except that it always messes up after you've entered the Fungal Garden. Seems like that's not always the case, though.
The looping becomes increasingly worse with each new room you go into when you try to quit from there. For example, if you try to quit in the sept, "Press Enter to Quit" loops once, but you can still quit. If you try to quit in, say, the last room of the game, you get an infinite loop.
I've been over the whole thing again and again, but I just can't find what the problem is.
I hope you guys will be willing to play-test / help me debug!
Any other comments on the code, suggestions on things to add or take out, and general advice would be greatly appreciated. Thanks!
Code can be found here: http://www.mediafire.com/?xfn1ngn1gdp
(Attempted) features include:
1) Linked puzzles and brain-teasers
2) Two tricky insta-kills
3) Exciting sorta-combat!
4) A womanizing, alcoholic protagonist
5) 11 rooms
Thanks for your help and patience.
Kendra
I just started poking around with Python recently, and I decided to do a text-adventure game project to practice some of the core concepts. Trying to think of ways to go about it, I stumbled on this DaniWeb post:
http://www.daniweb.com/forums/thread...t+rpg+tutorial
Gave me a lot of inspiration, and I took my main layout from that. Wonderful practice! So thanks to everyone who contributed to that thread. Hope you don't mind I borrowed some pieces of the code skeleton from there.
In any case, I'm about done with the adventure, but there are some minor (So far non-fatal) problems I've run into. The game is mostly playable, unless it has some errors I don't know about, which is more than likely.
I've sorted out most of the problems I've run into myself, but one thing I can't figure out is:
The "quit" option works just fine in the first few rooms. Then it starts screwing up a bit, looping once before quitting. I can't figure out where it starts to go screwy, except that it always messes up after you've entered the Fungal Garden. Seems like that's not always the case, though.
The looping becomes increasingly worse with each new room you go into when you try to quit from there. For example, if you try to quit in the sept, "Press Enter to Quit" loops once, but you can still quit. If you try to quit in, say, the last room of the game, you get an infinite loop.
I've been over the whole thing again and again, but I just can't find what the problem is.
I hope you guys will be willing to play-test / help me debug!
Any other comments on the code, suggestions on things to add or take out, and general advice would be greatly appreciated. Thanks!
Code can be found here: http://www.mediafire.com/?xfn1ngn1gdp
(Attempted) features include:
1) Linked puzzles and brain-teasers
2) Two tricky insta-kills
3) Exciting sorta-combat!
4) A womanizing, alcoholic protagonist
5) 11 rooms
Thanks for your help and patience.
Kendra
Last edited by k.wiseman; Jul 2nd, 2008 at 2:07 pm. Reason: Grammatical error, added more to post
It looks very nice. I guess I only have one comment at the moment, and that is that printing multiple lines of text is easier if you use triple quotes instead of lots of different print statements. For example:
->
Just a thought. You could also read the descriptions from files, I guess, but that's not really necessary.
Good work, it's much more than I'd have the patience to do.
Python Syntax (Toggle Plain Text)
print "You press one hand to your eyes and wave him away, but Ferrontius doe s" print "not move to go. 'I'm sorry, my liege, but it's my duty to inform" print "you that you've been confined to your apartments. Your father's order s," print "I'm afraid.'"
Python Syntax (Toggle Plain Text)
print """\ You press one hand to your eyes and wave him away, but Ferrontius does not move to go. 'I'm sorry, my liege, but it's my duty to inform you that you've been confined to your apartments. Your father's orders, I'm afraid.' """
Good work, it's much more than I'd have the patience to do.
dwk
Seek and ye shall find.
"Only those who will risk going too far can possibly find out how far one can go."
-- TS Eliot.
"I have not failed. I've just found 10,000 ways that won't work."
-- Thomas Alva Edison
"The only real mistake is the one from which we learn nothing."
-- John Powell
Seek and ye shall find.
"Only those who will risk going too far can possibly find out how far one can go."
-- TS Eliot.
"I have not failed. I've just found 10,000 ways that won't work."
-- Thomas Alva Edison
"The only real mistake is the one from which we learn nothing."
-- John Powell
•
•
Join Date: Jul 2008
Posts: 6
Reputation:
Solved Threads: 0
Thanks! I have the not-so-sneaking suspicion that the code could have been about half as long if I knew a little more.
For example, the prompts for every room are similar, but not the same. Anyone have any idea how I could have made a "prompt" class?
For example
First room:
Third room:
Can anyone help shorten this up? Alternate coding solutions welcome. I'm curious how else this could be done, since I only really know one way.
For example, the prompts for every room are similar, but not the same. Anyone have any idea how I could have made a "prompt" class?
For example
First room:
Python Syntax (Toggle Plain Text)
Leogas' bedroom def bedroom(): global leogasHp print "Health: ", leogasHp if leogasLeftBedroom == 0: bed_Desc1() else: bed_Desc2() # If you haven't left the room yet, this description will trigger def bed_Desc1(): print "You are standing in your own bedroom. In the corner is a preposterously" print "large, opulent four-poster bed. Empty wine bottles litter the floor and" print "the top of the dresser. Discarded clothing lays strewn about the rich" print "quarters. A faint, directionless light permeates the room." print "You see exits leading (E)ast, (W)est and (S)outh." print "Type 'help' for a list of commands." prompt_bed() # If you've already left the room, and are coming back, this description will trigger def bed_Desc2(): print "You are standing in your own bedroom. While you were out, it seems the" print "servants have inconspicuosly tidied up. Your bed was painstakingly made, " print "and the floors and surfaces are free of clutter. Seems the maids aren't perfect," print "however, as one last bottle lays half-hidden beneath the bed. A faint," print "directionless light permeates the room." print "You see exits leading (E)ast, (W)est and (S)outh." print "Type 'help' for a list of commands." prompt_bed() #prompt for bedroom def prompt_bed(): global leogasLeftBedroom global inventory prompt_b = raw_input("Your orders, my liege? ").lower() try: if prompt_b == "e": leogasLeftBedroom = 1 library() elif prompt_b == "w": leogasLeftBedroom = 1 guardroom() elif prompt_b == "s": leogasLeftBedroom = 1 fungalGarden() elif prompt_b == "help": help1() prompt_bed() elif prompt_b == "look": if leogasLeftBedroom == 0: bed_Desc1() else: bed_Desc2() elif prompt_b == "ex bed": if leogasLeftBedroom == 0: print "Your bed is a gigantic mess of slept-in silks and satins. Is that a" print "splash of vomit you see on the brocade pillows?" else: print "Your voluminous bed, with its carved mahogany posts, has been" print "meticulously made." prompt_bed() #You get a potion later. This ensures you can drink it while in the bedroom. elif prompt_b == "drink potion" or prompt_b == "drink healing potion": if "a healing potion" in inventory: if leogasHp < 35: leogasHp = 35 print "You've been healed! Your health is now ", leogasHp inventory.remove("a healing potion") else: print "You really ought to save that for when it counts." prompt_bed() else: print "You don't have a healing potion." prompt_bed() elif prompt_b == "ex clothes": if leogasLeftBedroom == 0: print "Your fine clothes lay rumpled in scattered heaps across the room. They" print "smell like pipe smoke and are splotched with stains." else: print "Your clothes are hanging neatly in the closet." prompt_bed() elif prompt_b == "ex bottles" or prompt_b == "ex bottle" or prompt_b == "ex wine": if leogasLeftBedroom == 0: print "Countless wine bottles of every shape and size lay around the room." print "Their emptiness is the only thing they have in common." else: print "The maids cleaned out all the bottles, except one, which you see poking" print "out from beneath the bed." prompt_bed() elif prompt_b == "take bottles" or prompt_b == "take bottle" or prompt_b == "take wine": if "an empty wine bottle" in inventory: print "You're already carrying a wine bottle." else: print "You snatch up an empty bottle. Its pleasing heft comforts you." inventory += ["an empty wine bottle"] print "Your inventory now contains: " for item in inventory: print item prompt_bed() elif prompt_b == "take bed": print "It's much too heavy, and anyway, you're in a weakened state." prompt_bed() elif prompt_b == "ex dresser": print "This stunning dresser features ironwork handles and a stunning walnut finish." prompt_bed() elif prompt_b == "open dresser": print "It's full of dresses. Always wondered why they called it that." prompt_bed() elif prompt_b == "take dresser": print "An adventurous spirit is appreciated, but c'mon." prompt_bed() elif prompt_b == "take dresses": print "Oh, how the servants would talk." prompt_bed() elif prompt_b == "take clothes": print "You ought to wait until the Clean Clothes Fairy comes and washes them, don't" print "you think?" prompt_bed() elif prompt_b == "ex pillow" or prompt_b == "ex pillows": print "The pillows are crafted from the finest red velvet and exquisite brocade." print "They smell of last night's dinner." prompt_bed() elif prompt_b == "take pillow" or prompt_b == "take pillows": print "Pillow fights are for sissies. Or for sultry bar wenches in lingerie." print "You are neither." prompt_bed() elif prompt_b == "i": print "Your inventory contains: " for item in inventory: print item prompt_bed() #you get a spotted mushroom later in the game. If you eat it at any time, you die. This ensures you can eat it in the bedroom. elif prompt_b == "eat mushroom" or prompt_b == "eat mushrooms": if "a spotted mushroom" in inventory: print "Colors and lights start to swirl before your eyes. You feel a portal" print "to another world opening." die() else: print "You don't have a spotted mushroom." prompt_bed() elif prompt_b == "q": quit() else: print "Pardon, my lord, I'm sure I don't know what you mean." prompt_bed() except ValueError: print "Pardon, my lord, I'm sure I don't know what you mean." prompt_bed()
Third room:
Python Syntax (Toggle Plain Text)
# If you haven't opened the secret door, this description will trigger def lib_Desc1(): print "You are standing in the library." print "An unusual, carved bookshelf packed full of musty tomes is set into the" print "northern wall. Fyrglyss lanterns, hung about at strategic locations, fill" print "the room with an unearthly glow." print "You see a single exit leading (W)est." print "Type 'help' for a list of commands." prompt_lib() # If you have opened the secret door, this description will trigger def lib_Desc2(): print "You are standing in the library." print "Before you stands a darkened doorway to outside." print "Fyrglyss lanterns, hung about at strategic locations, fill the room with" print "an unearthly glow." print "You see exits leading (W)est and (In)." print "Type 'help' for a list of commands." prompt_lib() # The library prompt def prompt_lib(): global inventory global gotLantern global bookOnShelf prompt_l = raw_input("Your orders, my liege? ").lower() try: if prompt_l == "w": bedroom() if prompt_l == "in": if bookOnShelf == 1: chamber() else: print "I'm sorry, my lord, I'm sure I don't know what you mean." prompt_lib() elif prompt_l == "help": help1() prompt_lib() elif prompt_l == "i": print "Your inventory contains: " for item in inventory: print item prompt_lib() elif prompt_l == "look": if bookOnShelf == 0: lib_Desc1() else: lib_Desc2() elif prompt_l == "ex shelf" or prompt_l == "ex bookshelf" or prompt_l == "ex shelves" or prompt_l == "ex bookshelves": print "These old bookshelves contain all manner of volumes. You see your diary" print "and an atlas among the rest of the arcane texts. You notice that there's" print "an empty space where a book seems to be missing." prompt_lib() elif prompt_l == "ex diary": print "'Dear Diary: Got drunk. Dear Diary: Got drunker.'" prompt_lib() elif prompt_l == "take diary": print "Ugh, no thanks. Too depressing." prompt_lib() elif prompt_l == "ex atlas": print "Maps of all the places you'll never see. Not if you stay locked up in" print "here, at any rate." prompt_lib() elif prompt_l == "take atlas": print "Maybe on the way out, when it'll be of some use." prompt_lib() elif prompt_l == "drink potion" or prompt_l == "drink healing potion": if "a healing potion" in inventory: if leogasHp < 35: leogasHp = 35 print "You've been healed! Your health is now ", leogasHp inventory.remove("a healing potion") else: print "You really ought to save that for when it counts." prompt_lib() else: print "You don't have a healing potion." prompt_lib() elif prompt_l == "ex lantern" or prompt_l == "ex lanterns": print "These shimmering lanterns sparkle with an ethereal glow." prompt_lib() elif prompt_l == "take lantern" or prompt_l == "take lanterns": if "a fyrglyss lantern" in inventory: print "You've already got a lantern." else: print "You take one of the lanterns down from its peg and hook it over your arm." gotLantern = 1 inventory += ["a fyrglyss lantern"] print "Your inventory now contains:" for item in inventory: print item prompt_lib() elif prompt_l == "ex space" or prompt_l == "ex empty space": print "It's empty. There's nothing there. Totally blank. Full of zero. Packed with" print "nada." prompt_lib() elif prompt_l == "take bookshelf" or prompt_l == "take shelf" or prompt_l == "take shelves" or prompt_l == "take bookshelves": print "This is no time to re-arrange the furniture." prompt_lib() elif prompt_l == "put book on shelf" or prompt_l == "put book on bookshelf" or prompt_l == "put book on shelves" or prompt_l == "put strange book on shelf" or prompt_l == "put strange book on bookshelf" or prompt_l == "put strange book on shelves": if "a strange book" in inventory: print "You place the strange book in the empty space on the shelf." bookOnShelf = 1 inventory.remove("a strange book") print "Suddenly you hear a great rumbling as the bookshelf slides away." print "Before you stands a darkened doorway and a flight of stairs leading down." print "You can feel fresh air wafting in through the opening." print "A way out!" else: print "You don't have a book in your possession." prompt_lib() elif prompt_l == "q": quit() #You can get a spotted mushroom later in the game. If you eat it at anytime, you die. elif prompt_l == "eat mushroom" or prompt_l == "eat mushrooms": if "a spotted mushroom" in inventory: print "Colors and lights start to swirl before your eyes. You feel a portal" print "to another world opening." die() else: print "You don't have a spotted mushroom." prompt_lib() else: print "Pardon, my lord, I'm sure I don't know what you mean." prompt_lib() except ValueError: print "Pardon, my lord, I'm sure I don't know what you mean." prompt_lib()
Can anyone help shorten this up? Alternate coding solutions welcome. I'm curious how else this could be done, since I only really know one way.
Last edited by k.wiseman; Jul 3rd, 2008 at 3:19 am. Reason: added comments
![]() |
Other Threads in the Python Forum
- Previous Thread: The problem with duck typing
- Next Thread: RE:Python path using Batch File
| Thread Tools | Search this Thread |
abrupt accessdenied anti apache application approximation argv array beginner book builtin calculator change converter countpasswordentry curved dan08 dictionaries dictionary dynamic edit enter examples file float format function gui homework import inches input java keyboard lapse launcher library line lines linux list lists loop microphone mouse movingimageswithpygame mysqlquery newb number numbers numeric output parameters parsing path phonebook plugin port prime programming projects py2exe pygame pyopengl pysimplewizard python random recursion redirect remote reverse scrolledtext session simple software sprite statictext string strings syntax table terminal text textarea thread threading time tlapse trick tuple tutorial twoup ubuntu unicode unit urllib urllib2 variable wordgame wxpython





