5 Replies - 835 Views - Last Post: 30 October 2012 - 10:54 AM Rate Topic: -----

#1 Python_rookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 15-October 12

Python Game: Functions and IF Clauses not Working Properly

Posted 15 October 2012 - 10:12 AM

I have been building this game in the last 4 days to train on Python: http://codepad.org/ZJgmHMnm

But what I can't my head around is the following.

1. Why does the line 74 not jump into the death() when it is called
2. Why is that when I enter "shoot" I do not get any of the messages in the list "quip" printed out?

Thanks!

Python_Rookie

Is This A Good Question/Topic? 0
  • +

Replies To: Python Game: Functions and IF Clauses not Working Properly

#2 jon.kiparsky  Icon User is online

  • Pancakes!
  • member icon


Reputation: 7997
  • View blog
  • Posts: 13,696
  • Joined: 19-March 11

Re: Python Game: Functions and IF Clauses not Working Properly

Posted 15 October 2012 - 10:26 AM

Couldya maybe post the relevant code here so we can all get on the same page?
Thanks.
Was This Post Helpful? 0
  • +
  • -

#3 Python_rookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 15-October 12

Re: Python Game: Functions and IF Clauses not Working Properly

Posted 15 October 2012 - 10:34 AM

##Excercise 43: Gothons from Planet Percal 
# G: 
# cd /Business/"Startup Projects"/IT/Programming/Python

# we import modules
from sys import exit
from random import  randint

#we create a class Game
class Game(object):
    # the class  Game has the attribute start
    def __init__(self,start):
	    # we declare a list. the instance has a variable "quip" which is a list
        self.quip =[
		"You died.   You kind suck at this.",
		"Your mom would be proud.  If she were smarter.",
		"Such a luser.",
		"I have a small puppy that's better at this."
        ]
        # we say the instance object has an attribute "start" with the value "start" 
        # by doing this we can pass the value of "start"  on the command line to the code	
        #self.central_corridor = central_corridor
        self.start = start
    
	#we define a function called "play" which references the instance object
	def play(self):
	    # a vraible next_room_name is defined which takes the value of the atrribute passed on to the class Game
		# during instantiation
		# next_room_name = self.central_corridor
		#next_room_name = central_corridor
	    next_room_name = self.start
		
        while True:
            print "\n-------"
			# room =central_corridor
            next_room_name = self.start   # added this line of code because Python did not know the variable next_room_name
            room = getattr(self, next_room_name)
			#next_room_name = central_corridor()  the function is central_corridor is run
            next_room_name = room()
            
    ## we define a function that refers to the instance object, i.e. the instance object has that function
    def death(self):
	    # we use randomint to print a random item out of the list, e.g. 
		#randomint(0, len(list) - 1)
		#randomint(0,3) gives 0, 1, 2, 3
		# does randomint gives out one number between 0, 1, 2,3
		print self.quip[randint(0,len(self.quip)- 1)] 
		# it is an abnormal exit and codes starts again
		exit(1)
    
    # function with reference to the instance object
    def central_corridor(self):
        print "The Gothons of Planet Percal #25 have invaded your ship and destroyed"
        print "your entire crew.  You are the last surviving member and your last"
        print  "mission is to get the neutron destruct bomb from the Weapons Armory,"
        print "put it in the bridge, and blow the ship up after getting into an "
        print "escape pod."
        print "\n"
        print "You're running down the central corridor to the Weapons Armory when"
        print "a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume"
        print "flowing around his hate filled body.  He's blocking the door to the"
        print "Armory and about to pull a weapon to blast you."
			
        action = raw_input(">   ")
        
        if action == "shoot":
            print "Quick on the draw you yank out your blaster and fire it at the Gothon."
            print "His clown costume is flowing and moving around his body, which throws"
            print "off your aim.  Your laser hits his costume but misses him entirely.  This"
            print "completely ruins his brand new costume his mother bought him, which"
            print "makes him fly into an insane rage and blast you repeatedly in the face until"
            print "you are dead.  Then he eats you."
			# you can use return anytime you want
            return 'death'
			
        elif action == "dodge":
            print 	"Like a world class boxer you dodge, weave, slip and slide right"
            print	"as the Gothon's blaster cranks a laser past your head."
            print	"In the middle of your artful dodge your foot slips and you"
            print	"bang your head on the metal wall and pass out."
            print   "You wake up shortly after only to die as the Gothon stomps on"			
            return  'death'
        
        elif action == "tell a joke":
           print "Lucky for you they made you learn Gothon insults in the academy."
           print  "You tell the one Gothon joke you know:"
           print   "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, fur fvgf nebhaq gur ubhfr."
           print  "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
           print "While he's laughing you run up and shoot him square in the head"
           print "putting him down, then jump through the Weapon Armory door."
           return 'laser_weapon_armory'
		   
        else:
		    print "Does not Compute"
			# if I have a function and I say return 'function name', it brings you to the beginning of the functiion
		    return 'central_corridor'
			
		
        def laser_weapon_armory(self):
            print "You do a dive roll into the Weapon Armory, crouch and scan the room" 
            print "for more Gothons that might be hiding.  It's dead quiet, too quiet."
            print "You stand up and run to the far side of the room and find the"
            print "neutron bomb in its container.  There's a keypad lock on the box"
            print "and you need the code to get the bomb out.  If you get the code"
            print "wrong 10 times then the lock closes forever and you can't"
            print "get the bomb.  The code is 3 digits."
            ## the right code is generated using radint
            code  = "%d%d%d" %(randint(1,9), randint(1,9),randint(1,9))
            # the person needs to enter a 3-digit codes
            guess = raw_input("[keypad]> ")
            guesses = 0
			
            # we need a loop that gives the user the chance to enter the code 10 times till he gets it
            while 	guess != code  and 	guesses < 10:
                print 	"BZZZZEDDD!"		
		guesses += 1
                print "You have ", 10 - guesses, " tries left"
                guess = raw_input("[keypad]> ")
			
	    if guess == code:
               print "The container clicks open and the seal breaks, letting gas out."
	       print "You grab the neutron bomb and run as fast as you can to the"
	       print "bridge where you must place it in the right spot."
               return 'the_bridge'
		   
            else:
               print "The lock buzzes one last time and then you hear a sickening"
               print  "melting sound as the mechanism is fused together."		
               print  "You decide to sit there, and finally the Gothons blow up the"
	       print   "ship from their ship and you die."
	       return 'death'
		   
		   
	def the_bridge(self):
		print "You burst onto the Bridge with the netron destruct bomb"
		print "under your arm and surprise 5 Gothons who are trying to"
		print "take control of the ship.  Each of them has an even uglier"
		print "clown costume than the last.  They haven't pulled their"
		print "weapons out yet, as they see the active bomb under your"
		print "arm and don't want to set it off."
			
		action = raw_input("> ")
		   
		if action == "throw the bomb":
	            print "In a panic you throw the bomb at the group of Gothons"
		    print "and make a leap for the door.  Right as you drop it a"
		    print "Gothon shoots you right in the back killing you."
		    print "As you die you see another Gothon frantically try to disarm"
		    print "the bomb. You die knowing they will probably blow up when"
		    print "it goes off."
		    return 'death'
			
		elif action == "slowly place the bomb":
		    print "You point your blaster at the bomb under your arm"
	            print "and the Gothons put their hands up and start to sweat."
	            print "You inch backward to the door, open it, and then carefully"
	            print "place the bomb on the floor, pointing your blaster at it."
	            print "You then jump back through the door, punch the close button"
	            print "and blast the lock so the Gothons can't get out."
	            print "Now that the bomb is placed you run to the escape pod to"
		    return 'escape_pod'
			   
		else: 
	            print "DOES NOT COMPUTE!"
		    return "the_bridge"
		   
        def escape_pod(self):
                print "You rush through the ship desperately trying to make it to"
                print "the escape pod before the whole ship explodes.  It seems like"
                print "hardly any Gothons are on the ship, so your run is clear of"			
		print "interference.  You get to the chamber with the escape pods, and"
		print "now need to pick one to take.  Some of them could be damaged"
		print "but you don't have time to look.  There's 5 pods, which one"
		print "do you take?"
				
		good_pod = randint(1,5)
		#[pod #]
		guess = raw_input("[pod #]>  ")
				
		# if the number the use entered does matches the random
		# generated number on good_pod
		
                if int(guess) != good_pod:
		    print "You jumped into the pod %s and hit the eject button."   % guess
		    print "The pod escapes out into the void of space, then"
		    print "implodes as the hull ruptures, crushing your body"
		    print "into jam jelly."
		    return 'death'
 			
		else: 
		    print "You jump into the pod %s and hit the eject button." % guess
		    print "The pod easily slides out into space heading to"
		    print "the planet below.  As it flies to the planet, you look"
		    print "back and see your ship implode then explode like a"
		    print "bright star, taking out the Gothon ship at the same"
		    print "time.  You won!"
		    exit(0)
			
# a variable a_game is declared 
# a_game is set to an instance object of the class Game() with the attribue" central_corridor"
#  but central_corridor itself is a name of a function
a_game = Game("central_corridor")
# the function play() is called on the instance object a_game
# this is where the game really begins
a_game.play()

## python ex74.py	


Was This Post Helpful? 0
  • +
  • -

#4 atraub  Icon User is offline

  • Pythoneer
  • member icon

Reputation: 759
  • View blog
  • Posts: 2,010
  • Joined: 23-December 08

Re: Python Game: Functions and IF Clauses not Working Properly

Posted 15 October 2012 - 08:03 PM

Your indentation needs work, this code won't run as is. I'm in the process of fixing it locally.

EDIT:
There are numerous indentation issues, when I'm finished I'll post code with that fixed.

1.) Delete line 36, it will keep you trapped in the same room forever.

2.) The else statement on line 126 needs to be at the same level as the while loop, otherwise your bomb goes off after 2 tries.... or at least that would work, however that won't take into account if the user gets the code right on the first try, so he'll die in that situation. I'll let you determine the appropriate fix for that.

EDIT 2:
Working code:
##Excercise 43: Gothons from Planet Percal 
# G: 
# cd /Business/"Startup Projects"/IT/Programming/Python

# we import modules
from sys import exit
from random import  randint

#we create a class Game
class Game(object):
    # the class  Game has the attribute start
    def __init__(self,start):
	    # we declare a list. the instance has a variable "quip" which is a list
        self.quip =[
		"You died.   You kind suck at this.",
		"Your mom would be proud.  If she were smarter.",
		"Such a luser.",
		"I have a small puppy that's better at this."
        ]
        # we say the instance object has an attribute "start" with the value "start" 
        # by doing this we can pass the value of "start"  on the command line to the code	
        #self.central_corridor = central_corridor
        self.start = start

    #we define a function called "play" which references the instance object
    def play(self):
        # a vraible next_room_name is defined which takes the value of the atrribute passed on to the class Game
        # during instantiation
        # next_room_name = self.central_corridor
        #next_room_name = central_corridor
        next_room_name = self.start
            
        while True:
            print "\n-------"
                        # room =central_corridor
            room = getattr(self, next_room_name)
                        #next_room_name = central_corridor()  the function is central_corridor is run
            next_room_name = room()
            
    ## we define a function that refers to the instance object, i.e. the instance object has that function
    def death(self):
        # we use randomint to print a random item out of the list, e.g. 
        #randomint(0, len(list) - 1)
        #randomint(0,3) gives 0, 1, 2, 3
        # does randomint gives out one number between 0, 1, 2,3
        print self.quip[randint(0,len(self.quip)- 1)] 
        # it is an abnormal exit and codes starts again
        exit(1)
    
    # function with reference to the instance object
    def central_corridor(self):
        print "The Gothons of Planet Percal #25 have invaded your ship and destroyed"
        print "your entire crew.  You are the last surviving member and your last"
        print  "mission is to get the neutron destruct bomb from the Weapons Armory,"
        print "put it in the bridge, and blow the ship up after getting into an "
        print "escape pod."
        print "\n"
        print "You're running down the central corridor to the Weapons Armory when"
        print "a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume"
        print "flowing around his hate filled body.  He's blocking the door to the"
        print "Armory and about to pull a weapon to blast you."
			
        action = raw_input(">   ")
        
        if action == "shoot":
            print "Quick on the draw you yank out your blaster and fire it at the Gothon."
            print "His clown costume is flowing and moving around his body, which throws"
            print "off your aim.  Your laser hits his costume but misses him entirely.  This"
            print "completely ruins his brand new costume his mother bought him, which"
            print "makes him fly into an insane rage and blast you repeatedly in the face until"
            print "you are dead.  Then he eats you."
			# you can use return anytime you want
            return 'death'
			
        elif action == "dodge":
            print 	"Like a world class boxer you dodge, weave, slip and slide right"
            print	"as the Gothon's blaster cranks a laser past your head."
            print	"In the middle of your artful dodge your foot slips and you"
            print	"bang your head on the metal wall and pass out."
            print   "You wake up shortly after only to die as the Gothon stomps on"			
            return  'death'
        
        elif action == "tell a joke":
           print "Lucky for you they made you learn Gothon insults in the academy."
           print  "You tell the one Gothon joke you know:"
           print   "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, fur fvgf nebhaq gur ubhfr."
           print  "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
           print "While he's laughing you run up and shoot him square in the head"
           print "putting him down, then jump through the Weapon Armory door."
           return 'laser_weapon_armory'
		   
        else:
           print "Does not Compute"
           # if I have a function and I say return 'function name', it brings you to the beginning of the functiion
           return 'central_corridor'
			
		
    def laser_weapon_armory(self):
        print "You do a dive roll into the Weapon Armory, crouch and scan the room" 
        print "for more Gothons that might be hiding.  It's dead quiet, too quiet."
        print "You stand up and run to the far side of the room and find the"
        print "neutron bomb in its container.  There's a keypad lock on the box"
        print "and you need the code to get the bomb out.  If you get the code"
        print "wrong 10 times then the lock closes forever and you can't"
        print "get the bomb.  The code is 3 digits."
        ## the right code is generated using radint
        code  = "%d%d%d" %(randint(1,9), randint(1,9),randint(1,9))
        # the person needs to enter a 3-digit codes
        guess = raw_input("[keypad]> ")
        guesses = 0
                    
        # we need a loop that gives the user the chance to enter the code 10 times till he gets it
        while 	guess != code  and 	guesses < 10:
            print 	"BZZZZEDDD!"		
            guesses += 1
            print "You have ", 10 - guesses, " tries left"
            guess = raw_input("[keypad]> ")
                    
            if guess == code:
                print "The container clicks open and the seal breaks, letting gas out."
                print "You grab the neutron bomb and run as fast as you can to the"
                print "bridge where you must place it in the right spot."
                return 'the_bridge'
                   
        else:
            print "The lock buzzes one last time and then you hear a sickening"
            print  "melting sound as the mechanism is fused together."		
            print  "You decide to sit there, and finally the Gothons blow up the"
            print   "ship from their ship and you die."
            return 'death'
               
               
    def the_bridge(self):
        print "You burst onto the Bridge with the netron destruct bomb"
        print "under your arm and surprise 5 Gothons who are trying to"
        print "take control of the ship.  Each of them has an even uglier"
        print "clown costume than the last.  They haven't pulled their"
        print "weapons out yet, as they see the active bomb under your"
        print "arm and don't want to set it off."
                
        action = raw_input("> ")
           
        if action == "throw the bomb":
            print "In a panic you throw the bomb at the group of Gothons"
            print "and make a leap for the door.  Right as you drop it a"
            print "Gothon shoots you right in the back killing you."
            print "As you die you see another Gothon frantically try to disarm"
            print "the bomb. You die knowing they will probably blow up when"
            print "it goes off."
            return 'death'
                
        elif action == "slowly place the bomb":
            print "You point your blaster at the bomb under your arm"
            print "and the Gothons put their hands up and start to sweat."
            print "You inch backward to the door, open it, and then carefully"
            print "place the bomb on the floor, pointing your blaster at it."
            print "You then jump back through the door, punch the close button"
            print "and blast the lock so the Gothons can't get out."
            print "Now that the bomb is placed you run to the escape pod to"
            return 'escape_pod'
                   
        else: 
            print "DOES NOT COMPUTE!"
            return "the_bridge"
               
    def escape_pod(self):
        print "You rush through the ship desperately trying to make it to"
        print "the escape pod before the whole ship explodes.  It seems like"
        print "hardly any Gothons are on the ship, so your run is clear of"			
        print "interference.  You get to the chamber with the escape pods, and"
        print "now need to pick one to take.  Some of them could be damaged"
        print "but you don't have time to look.  There's 5 pods, which one"
        print "do you take?"
                            
        good_pod = randint(1,5)
        #[pod #]
        guess = raw_input("[pod #]>  ")
                        
        # if the number the use entered does matches the random
        # generated number on good_pod
        
        if int(guess) != good_pod:
            print "You jumped into the pod %s and hit the eject button."   % guess
            print "The pod escapes out into the void of space, then"
            print "implodes as the hull ruptures, crushing your body"
            print "into jam jelly."
            return 'death'
                
        else: 
            print "You jump into the pod %s and hit the eject button." % guess
            print "The pod easily slides out into space heading to"
            print "the planet below.  As it flies to the planet, you look"
            print "back and see your ship implode then explode like a"
            print "bright star, taking out the Gothon ship at the same"
            print "time.  You won!"
            exit(0)
                    
# a variable a_game is declared 
# a_game is set to an instance object of the class Game() with the attribue" central_corridor"
#  but central_corridor itself is a name of a function
a_game = Game("central_corridor")
# the function play() is called on the instance object a_game
# this is where the game really begins
a_game.play()

## python ex74.py	



This post has been edited by atraub: 15 October 2012 - 08:22 PM

Was This Post Helpful? 1
  • +
  • -

#5 baavgai  Icon User is online

  • Dreaming Coder
  • member icon

Reputation: 5929
  • View blog
  • Posts: 12,851
  • Joined: 16-October 07

Re: Python Game: Functions and IF Clauses not Working Properly

Posted 16 October 2012 - 06:32 AM

There is not reason at all for this to be a class. It's confusing.

When you flatten it out, it seems easier to read:
from random import  randint


def getAction():
	return raw_input(">   ")


def showQuip():
	quip =[
		"You died.   You kind suck at this.",
		"Your mom would be proud.  If she were smarter.",
		"Such a luser.",
		"I have a small puppy that's better at this."
	]
	print quip[randint(0,len(quip)- 1)] 


def endGame():
	pass


def win():
	print "You jump into the pod %s and hit the eject button." % guess
	print "The pod easily slides out into space heading to"
	print "the planet below.  As it flies to the planet, you look"
	print "back and see your ship implode then explode like a"
	print "bright star, taking out the Gothon ship at the same"
	print "time.  You won!"
	return endGame


def death():
	showQuip()
	return endGame


def laser_weapon_armory():
	print "You do a dive roll into the Weapon Armory, crouch and scan the room" 
	print "for more Gothons that might be hiding.  It's dead quiet, too quiet."
	print "You stand up and run to the far side of the room and find the"
	print "neutron bomb in its container.  There's a keypad lock on the box"
	print "and you need the code to get the bomb out.  If you get the code"
	print "wrong 10 times then the lock closes forever and you can't"
	print "get the bomb.  The code is 3 digits."
	
	code  = "%d%d%d" %(randint(1,9), randint(1,9),randint(1,9))
	guess = raw_input("[keypad]> ")
	guesses = 0
	
	while guess != code  and guesses < 10:
		print "BZZZZEDDD!"
		guesses += 1
		print "You have ", 10 - guesses, " tries left"
		guess = raw_input("[keypad]> ")
	
	if guess == code:
		print "The container clicks open and the seal breaks, letting gas out."
		print "You grab the neutron bomb and run as fast as you can to the"
		print "bridge where you must place it in the right spot."
		return the_bridge

	print "The lock buzzes one last time and then you hear a sickening"
	print  "melting sound as the mechanism is fused together."		
	print  "You decide to sit there, and finally the Gothons blow up the"
	print   "ship from their ship and you die."
	return death




def central_corridor():
	print "The Gothons of Planet Percal #25 have invaded your ship and destroyed"
	print "your entire crew.  You are the last surviving member and your last"
	print  "mission is to get the neutron destruct bomb from the Weapons Armory,"
	print "put it in the bridge, and blow the ship up after getting into an "
	print "escape pod."
	print "\n"
	print "You're running down the central corridor to the Weapons Armory when"
	print "a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume"
	print "flowing around his hate filled body.  He's blocking the door to the"
	print "Armory and about to pull a weapon to blast you."
	
	action = getAction()
	if action == "shoot":
		print "Quick on the draw you yank out your blaster and fire it at the Gothon."
		print "His clown costume is flowing and moving around his body, which throws"
		print "off your aim.  Your laser hits his costume but misses him entirely.  This"
		print "completely ruins his brand new costume his mother bought him, which"
		print "makes him fly into an insane rage and blast you repeatedly in the face until"
		print "you are dead.  Then he eats you."
		return death
		
	if action == "dodge":
		print 	"Like a world class boxer you dodge, weave, slip and slide right"
		print	"as the Gothon's blaster cranks a laser past your head."
		print	"In the middle of your artful dodge your foot slips and you"
		print	"bang your head on the metal wall and pass out."
		print   "You wake up shortly after only to die as the Gothon stomps on"
		return  death

	if action == "tell a joke":
		print "Lucky for you they made you learn Gothon insults in the academy."
		print "You tell the one Gothon joke you know:"
		print "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, fur fvgf nebhaq gur ubhfr."
		print "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
		print "While he's laughing you run up and shoot him square in the head"
		print "putting him down, then jump through the Weapon Armory door."
		return laser_weapon_armory

	print "Does not Compute"
	return central_corridor



def the_bridge():
	print "You burst onto the Bridge with the netron destruct bomb"
	print "under your arm and surprise 5 Gothons who are trying to"
	print "take control of the ship.  Each of them has an even uglier"
	print "clown costume than the last.  They haven't pulled their"
	print "weapons out yet, as they see the active bomb under your"
	print "arm and don't want to set it off."

	action = getAction()

	if action == "throw the bomb":
		print "In a panic you throw the bomb at the group of Gothons"
		print "and make a leap for the door.  Right as you drop it a"
		print "Gothon shoots you right in the back killing you."
		print "As you die you see another Gothon frantically try to disarm"
		print "the bomb. You die knowing they will probably blow up when"
		print "it goes off."
		return death
		
	if action == "slowly place the bomb":
		print "You point your blaster at the bomb under your arm"
		print "and the Gothons put their hands up and start to sweat."
		print "You inch backward to the door, open it, and then carefully"
		print "place the bomb on the floor, pointing your blaster at it."
		print "You then jump back through the door, punch the close button"
		print "and blast the lock so the Gothons can't get out."
		print "Now that the bomb is placed you run to the escape pod to"
		return escape_pod

	print "DOES NOT COMPUTE!"
	return the_bridge


def escape_pod():
	print "You rush through the ship desperately trying to make it to"
	print "the escape pod before the whole ship explodes.  It seems like"
	print "hardly any Gothons are on the ship, so your run is clear of"			
	print "interference.  You get to the chamber with the escape pods, and"
	print "now need to pick one to take.  Some of them could be damaged"
	print "but you don't have time to look.  There's 5 pods, which one"
	print "do you take?"
			
	guess = int(raw_input("[pod #]>  "))
	if guess == randint(1,5):
		return win
		
	print "You jumped into the pod %s and hit the eject button."   % guess
	print "The pod escapes out into the void of space, then"
	print "implodes as the hull ruptures, crushing your body"
	print "into jam jelly."
	return death


def play():
	room = central_corridor
	while not room==endGame:
		print "\n-------"
		room = room()

play()



Considering your player has only a 1 in 1000 shot of guessing the right answer, you might wish to reconsider that. Now, if you made it a high low game, that would be kind of fun.

Since the possible responses are limited, it would be nice if I could just back one. I understand the keep typing and guessing aesthetic, but it gets old real quick.

Do NOT use exit. It's a sign of failed logic. You should be able to leave your program without ever using it.

Hope this helps.
Was This Post Helpful? 0
  • +
  • -

#6 Python_rookie  Icon User is offline

  • New D.I.C Head

Reputation: 0
  • View blog
  • Posts: 3
  • Joined: 15-October 12

Re: Python Game: Functions and IF Clauses not Working Properly

Posted 30 October 2012 - 10:54 AM

Thank you!

I removed this line "next_room_name = self.start" from the code as you instructed.

But what I don't understand is that I get the below error even though the new code I have
looks like the corrected code you pasted above.. What am I doing wrong in the code below?

-------
Traceback (most recent call last):
Line 171, in <module>
a_game = Game("central_corridor")
Line 22, in __init__
room = getattr(self, next_room_name)
UnboundLocalError: local variable 'next_room_name' referenced before assignment


from sys import exit
from random import  randint

class Game(object):
 
    def __init__(self,start):
	 
        self.quip =[
		"You died.   You kind suck at this.",
		"Your mom would be proud.  If she were smarter.",
		"Such a luser.",
		"I have a small puppy that's better at this."
        ]
        self.start = start
    

	def play(self):
	    next_room_name = self.start
		
        while True:
            print "\n-------"
            room = getattr(self, next_room_name)
            next_room_name = room()
            
    def death(self):
		print self.quip[randint(0,len(self.quip)- 1)] 
		exit(1)
    

    def central_corridor(self):
        print "The Gothons of Planet Percal #25 have invaded your ship and destroyed"
        print "your entire crew.  You are the last surviving member and your last"
        print  "mission is to get the neutron destruct bomb from the Weapons Armory,"
        print "put it in the bridge, and blow the ship up after getting into an "
        print "escape pod."
        print "\n"
        print "You're running down the central corridor to the Weapons Armory when"
        print "a Gothon jumps out, red scaly skin, dark grimy teeth, and evil clown costume"
        print "flowing around his hate filled body.  He's blocking the door to the"
        print "Armory and about to pull a weapon to blast you."
			
        action = raw_input(">   ")
        
        if action == "shoot":
            print "Quick on the draw you yank out your blaster and fire it at the Gothon."
            print "His clown costume is flowing and moving around his body, which throws"
            print "off your aim.  Your laser hits his costume but misses him entirely.  This"
            print "completely ruins his brand new costume his mother bought him, which"
            print "makes him fly into an insane rage and blast you repeatedly in the face until"
            print "you are dead.  Then he eats you."
            return 'death'
			
        elif action == "dodge":
            print 	"Like a world class boxer you dodge, weave, slip and slide right"
            print	"as the Gothon's blaster cranks a laser past your head."
            print	"In the middle of your artful dodge your foot slips and you"
            print	"bang your head on the metal wall and pass out."
            print   "You wake up shortly after only to die as the Gothon stomps on"			
            return  'death'
        
        elif action == "tell a joke":
           print "Lucky for you they made you learn Gothon insults in the academy."
           print  "You tell the one Gothon joke you know:"
           print   "Lbhe zbgure vf fb sng, jura fur fvgf nebhaq gur ubhfr, fur fvgf nebhaq gur ubhfr."
           print  "The Gothon stops, tries not to laugh, then busts out laughing and can't move."
           print "While he's laughing you run up and shoot him square in the head"
           print "putting him down, then jump through the Weapon Armory door."
           return 'laser_weapon_armory'
		   
        else:
		    print "Does not Compute"
		    return 'central_corridor'
			
		
        def laser_weapon_armory(self):
            print "You do a dive roll into the Weapon Armory, crouch and scan the room" 
            print "for more Gothons that might be hiding.  It's dead quiet, too quiet."
            print "You stand up and run to the far side of the room and find the"
            print "neutron bomb in its container.  There's a keypad lock on the box"
            print "and you need the code to get the bomb out.  If you get the code"
            print "wrong 10 times then the lock closes forever and you can't"
            print "get the bomb.  The code is 3 digits."
            code  = "%d%d%d" %(randint(1,9), randint(1,9),randint(1,9))
            guess = raw_input("[keypad]> ")
            guesses = 0
			
            while 	guess != code  and 	guesses < 10:
			    print 	"BZZZZEDDD!!"
			    guesses += 1
			    print "You have ", 10 - guesses, " tries left"
			    guess = raw_input("[keypad]> ")
			
	    if guess == code:
                print "The container clicks open and the seal breaks, letting gas out."
	        print "You grab the neutron bomb and run as fast as you can to the"
	        print "bridge where you must place it in the right spot."
                return 'the_bridge'
		   
            else:
                print "The lock buzzes one last time and then you hear a sickening"
                print  "melting sound as the mechanism is fused together."		
                print  "You decide to sit there, and finally the Gothons blow up the"
	        print   "ship from their ship and you die."
	        return 'death'
		   
		   
	def the_bridge(self):
		print "You burst onto the Bridge with the netron destruct bomb"
		print "under your arm and surprise 5 Gothons who are trying to"
		print "take control of the ship.  Each of them has an even uglier"
		print "clown costume than the last.  They haven't pulled their"
		print "weapons out yet, as they see the active bomb under your"
		print "arm and don't want to set it off."
			
		action = raw_input("> ")
		   
		if action == "throw the bomb":
	            print "In a panic you throw the bomb at the group of Gothons"
		    print "and make a leap for the door.  Right as you drop it a"
		    print "Gothon shoots you right in the back killing you."
		    print "As you die you see another Gothon frantically try to disarm"
		    print "the bomb. You die knowing they will probably blow up when"
		    print "it goes off."
		    return 'death'
			
		elif action == "slowly place the bomb":
		    print "You point your blaster at the bomb under your arm"
	            print "and the Gothons put their hands up and start to sweat."
	            print "You inch backward to the door, open it, and then carefully"
	            print "place the bomb on the floor, pointing your blaster at it."
	            print "You then jump back through the door, punch the close button"
	            print "and blast the lock so the Gothons can't get out."
	            print "Now that the bomb is placed you run to the escape pod to"
		    return 'escape_pod'
			   
		else: 
	            print "DOES NOT COMPUTE!"
		    return "the_bridge"
		   
        def escape_pod(self):
                print "You rush through the ship desperately trying to make it to"
                print "the escape pod before the whole ship explodes.  It seems like"
                print "hardly any Gothons are on the ship, so your run is clear of"			
		print "interference.  You get to the chamber with the escape pods, and"
		print "now need to pick one to take.  Some of them could be damaged"
		print "but you don't have time to look.  There's 5 pods, which one"
		print "do you take?"
				
		good_pod = randint(1,5)
		guess = raw_input("[pod #]>  ")
				

		
                if int(guess) != good_pod:
		    print "You jumped into the pod %s and hit the eject button."   % guess
		    print "The pod escapes out into the void of space, then"
		    print "implodes as the hull ruptures, crushing your body"
		    print "into jam jelly."
		    return 'death'
 			
		else: 
		    print "You jump into the pod %s and hit the eject button." % guess
		    print "The pod easily slides out into space heading to"
		    print "the planet below.  As it flies to the planet, you look"
		    print "back and see your ship implode then explode like a"
		    print "bright star, taking out the Gothon ship at the same"
		    print "time.  You won!"
		    exit(0)
			

a_game = Game("central_corridor")

a_game.play()

## python ex74_2_error.py	




Was This Post Helpful? 0
  • +
  • -

Page 1 of 1