On 3/24/2013 3:41 PM, John Bochicchio wrote:
I've been trying to write a simple test text adventure
[snip]

Good first try! As you learn OOP and use of classes you will discover ways to improve and simplify coding.

Here's an example. It is far from perfect, but definitely worth a study. It will make text adventures easier to create. Note that this separates logic from data. Most room definitions have only data and the Room class has the common logic.

from sys import exit
from random import randint

class Room: # superclass of rooms
  actions = dict()
  def __init__(self):
    self.prompt = ', '.join(self.actions.keys())
  def enter(self):
    print self.enterMsg
    if self.prompt:
      while True:
        action = raw_input(self.prompt + ">").lower()
        next = self.actions.get(action,None)
        if next is None:
          print "Not a valid command"
        else:
          print next[0]
          return next[1]
    else:
      exit(1)

class Shack_front(Room):
enterMsg = "The year is 2062, and the zombies have risen. You're not a doctor, and you have no training. You're just a guy trying to survive.\n"
  enterMsg += "......" * 8 + "\n"
enterMsg += "You stand in front of a broken down shack, you here gurgles and screams from inside. There is a window to the side of the house "
  enterMsg += "that you can see through, or a door you can burst into.\n"
  enterMsg += "......" * 8 + "\n"
  actions = dict(
window = ("You silently walk over to the dirty window. You look inside to see a man held captive by 2 marauders. " "The marauders are armed with bats, and don't seem to know what they're doing. You have 1 9mm glock with 12 bullets.", 'window'), door = ("You burst through the door with your shoulder. You see only one marauder. You shoot him in the chest and notice a man tied up " "in a chair. You walk over to him but feel a sharp pain in the back of your head. You never saw the second marauder coming.", 'death'))

class Shack_window(Room):
enterMsg = "Do you burst through the door or try to fire through the window at the marauders?"
  actions = dict(
window = ("You fire off three shots through the window. Two in the chest of the first marauder, one in the neck of the other. " "They fall to the ground, dead. You walk inside to see if the man is okay.", 'window'), door = ("You burst through the door and fire two shots into the first marauder. You remember seeing two, so you turn around and " "put one bullet through the head of the one behind you. You walk over to the man to see if he's okay.", 'death'))

class Death(Room):
  quips = ["You've become a zombie and eat you pals. Douche.",
"You've died and left your comrades to fend for themselves. Douche",
           "Your whole group dies because of you. Douche.",
"You've got terrible planning skills, and ruined the teams chances of survival. Douche."]
  enterMsg = quips[randint(0, len(quips)-1)]
  actions = dict()

rooms = dict(shack_front = Shack_front(), death = Death(), window = Shack_window())
next = 'shack_front'
while True:
  next = rooms[next].enter()

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

_______________________________________________
Tutor maillist  -  [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor

Reply via email to