Alan Gauld
Sat, 28 Aug 2010 02:00:04 -0700
"kevin hayes" <kevino...@gmail.com> wrote
Hi all! I'm trying to write a basic text adventure game to start learning python (just for fun). I've gone through the first four chapters of a "learn python game programming book" and I'm having trouble with the exercise onwriting a text adventure.
Sorry I don't know the book but...
I'm looking for the simplest version of this as possible, becauseI'm having trouble with the concepts.
What is your programming background? Have you programmed in any other language before or is Python your fist?
an idea where I'm at. However, I would really like someone to lay out alittle code structure for me.
I think you are maybe trying to run too fast.Its good practice in programming to build things up slowly, pece by piece. In your case forget about the loop initially. Just write the individual functions
and test each one individually. Once you get the functions working ontheir own you can start to build the structure to call them. [This approach
is known as bottom-up programming in case you are interested]This approach is particularl;y powerful in a language like Python because if you put the functions in a file you can import that file as a module
(have you covered modules yet?) Then at the intreractive prompt(>>>) you can interactively test your functions to check they work.
keepGoing = True while keepGoing == True: global gold
You don;t need this global is only used inside a function definition so that the function can modify variables outside the function. You are not inside a function at this point.
gold = 0 def RoomOne():
Here you are defining a function inside the while loop. So you will redefine the function every time through the loop. This is wasteful and not needed. Take the definition outside the loop.
print "You find yourself in a large room. Above you is a massivecrystal"print "chandelier. In front of you is round stone fountain, spewingwater"print "from it's center. On the walls hang green satin drapery. Theceiling"print "is comprised of three ornate arches. There is an arch infront of you"print "and to your right and left. A staircase leads up from underthe arch"print "in front of you. Under the arches to your left and right arelarge wooden"print "doors, each with an iron handle. Enter 'Help' for a full listof commands."
Use a triple quoted string to avoid multiple print statements.
RoomOne() Command = raw_input("Please enter a command. ") Command = Command.upper() if Command == "N": RoomFour() elif Command == "S":print "You ditched the creepy castle and headed for the road."keepGoing == False elif Command == "E": RoomTwo() elif Command == "HELP": print "List of Commands: 'Help',then enter for this list."print "'N', then enter = Door to the North." print "'S', then enter = Door to the South."print "'E', then enter = Door to the East." print "'W', then enter = Door to the West."print "'Look at', then 'objects name', then enter= Looks at an object."print "'Pick Up', then 'objects name', then enter= Picks up an object." print "'Q', then enter = Quit Game." elif Command == "W": RoomSix() elif Command == "LOOK AT FOUNTAIN": print "There appears to be 4 gold coins in it." elif Command == "PICK UP 4 GOLD COINS": gold = gold + 4 print "Current Gold = ", gold elif Command == "Q": keepGoing = False else: print "That doesn't work." def RoomTwo(): print "Current Gold = ", goldprint "In the middle of the room is a large Gargoyle with fiery redeyes."print "He's holding a cup. In the southeast corner of the room yousee a broom"print "with dust and cob-webs on it. Next to the broom is a deadrat."print "To the north is another door. In front of the door is anoverturned basket." promptTwo = raw_input("What are you going to do? ") promptTwo = promptTwo.upper() if promptTwo == "N": RoomThree() elif promptTwo == "S": print "There is no door there." elif promptTwo == "W": RoomOne() elif promptTwo == "E": print "There is only a wall there." elif promptTwo == "Q": keepGoing = False elif promptTwo == "PICK UP BASKET": print "You pick up the basket, revealing 2 gold pieces." RoomTwo() elif promptTwo == "PICK UP 2 GOLD COINS": gold = gold + 2 print "Current Gold = ", gold RoomTwo() elif promptTwo == "LOOK AT GARGOYLE":print "Looking at the Gargoyle you notice he's really mean, andreally still." RoomTwo() elif promptTwo == "LOOK AT BROOM":print "Looking at the broom, you notice it's unnecessarity dirty."elif promptTwo == "PICK UP BROOM": print " You pick up the broom. But you don't notice anything special, so you" print "set it back down where it was." elif promptTwo == "LOOK AT CUP": print "You look at the cup, and find nothing of interest." elif promptTwo == "LOOK AT DEAD RAT":print "You look at the dead rat and find it utterly disgusting."elif promptTwo == "HELP": print "List of Commands: 'Help',then enter for this list."print "'N', then enter = Door to the North." print "'S', then enter = Door to the South."print "'E', then enter = Door to the East." print "'W', then enter = Door to the West."print "'Look at', then 'objects name', then enter= Looks at an object."print "'Pick Up', then 'objects name', then enter= Picks up an object." print "'Q', then enter = Quit Game." else: print "That didn't work." def RoomThree(): print "Current Gold = ", goldprint "To the north is a giant replica of a wooley mamoth. Histusks are made"print "of gold. To the east is a painting of Mother Theresa. Underthe painting"print "is a baby's crib. The only doors you see are to the south andwest." promptThree = raw_input("What would you like to do? ") promptThree = promptThree.upper()
You could improve the generality of the code by building a data model
of your castle using a multi dimensional list.
Rooms = [[Room3, Room4,NotExist],
[Room0,Room1,Room2]]
You can access your functions like:
Rooms[X][Y]()
Now you can define your movement commands as arithmetic operations
on the indices of the Rooms map, eg:
N increment the Y index
S decrement the Y index
E increment the X index
W decrement the X index
If you pass the direction value as a parameter the room functions can
check if a valid entrance exists on that side. So in Room3 you might
have:
def Room3(dir):
if dir == 'N':
raise NoDoorError, "Cannot enter Room3 from the South"
# rest of code here
Just some ideas.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
_______________________________________________
Tutor maillist - Tutor@python.org
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor