Python RPG游戏,UnboundLocalError

时间:2017-01-13 20:16:06

标签: python python-2.7

当我执行此代码(下面列出)时,我得到:

  

回溯(最近一次呼叫最后):文件" Test.py",207行,in          Commandsc File" Test.py",第116行,在移动中       如果kamers中的naartoe [1] [currentKamer]:UnboundLocalError:局部变量' currentKamer'在分配前引用

首先我想我可以添加"全球"但后来我得到一个语法错误。 你能解释一下我做错了什么而不仅仅是编辑代码吗?

import os
import time

from random import randint 
currentKamer = 1
class Character: 
  #data
  def __init__(self): 
    self.naam = "" 
    self.levens = 1 
    self.levens_max = 1 

  #het vecht systeem voor speler en tegenstander is hetzelfde (ik ben lui en dit is makkelijker)
  def do_schade(self, tegenstander): 
    schade = min( 
        max(randint(0, self.levens) - randint(0, tegenstander.levens), 0), 
        tegenstander.levens) 
    tegenstander.levens = tegenstander.levens - schade 
    if schade == 0: print "%s ontwijkt %s's aanval." % (tegenstander.naam, self.naam) 
    else: print "%s beschadigd %s!" % (self.naam, tegenstander.naam) 
    return tegenstander.levens <= 0 

#tegenstander functies 
class Tegenstander(Character): 
  def __init__(self, speler): 
    Character.__init__(self) 
    self.naam = 'een aziaat' 
    self.levens = randint(1, speler.levens) 

#speler functies 
class Speler(Character): 
  def __init__(self): 
    Character.__init__(self) 
    self.state = 'normal' 
    self.levens = 10 
    self.levens_max = 10 

  #stoppen
  def quit(self): 
    print "%s kan niet meer uit de school ontsnappen en gaat dood.\nR.I.P." % self.naam 
    self.levens = 0 

  #help commando
  def help(self): print Commands.keys() 

  #laat levens zien
  def status(self): print "%s's levens: %d/%d" % (self.naam, self.levens, self.levens_max) 

  #als je te lang loopt
  def moe(self): 
    print "%s voelt zich moe." % self.naam 
    self.levens = max(1, self.levens - 1) 

  #slapen/rusten
  def rest(self): 
    if self.state != 'normal': print "%s kan nu niet rusten!" % self.naam; self.tegenstander_attacks() 
    else: 
      print "%s rust." % self.naam 
      if randint(0, 1): 
        self.tegenstander = Tegenstander(self) 
        print "%s is abrupt wakker gemaakt door %s!" % (self.naam, self.tegenstander.naam) 
        self.state = 'fight' 
        self.tegenstander_attacks() 
      else: 
        if self.levens < self.levens_max: 
          self.levens = self.levens + 1 
        else: print "%s heeft te veel gerust." % self.naam; self.levens = self.levens - 1 

  #rond lopen
  def verken(self): 
    if self.state != 'normal': 
      print "%s is te druk bezig!" % self.naam 
      self.tegenstander_attacks() 
    else: 
      print "%s verkent een grot." % self.naam 
      if randint(0, 3): 
        self.tegenstander = Tegenstander(self) 
        print "%s treft %s!" % (self.naam, self.tegenstander.naam) 
        self.state = 'fight' 
      else: 
        if randint(0, 1): self.moe() 

  #vluchten
  def flee(self): 
    if self.state != 'fight': print "%s rent in angst weg." % self.naam; self.moe() 
    else: 
      if randint(1, self.levens + 5) > randint(1, self.tegenstander.levens): 
        print "%s vlucht van %s." % (self.naam, self.tegenstander.naam) 
        self.tegenstander = None 
        self.state = 'normal' 
      else: print "%s kon niet ontsnappen van %s!" % (self.naam, self.tegenstander.naam); self.tegenstander_attacks() 

  #aanvallen
  def attack(self): 
    if self.state != 'fight': print "%s zwaait in de lucht, maar hij geeft op." % self.naam; self.moe() 
    else: 
      if self.do_schade(self.tegenstander): 
        print "%s vermoord %s!" % (self.naam, self.tegenstander.naam) 
        self.tegenstander = None 
        self.state = 'normal' 
        if randint(0, self.levens) < 10: 
          self.levens = self.levens + 1 
          self.levens_max = self.levens_max + 1 
          print "%s voelt zich sterker!" % self.naam 
      else: self.tegenstander_attacks() 

  #als tegenstander je dood
  def tegenstander_attacks(self): 
    if self.tegenstander.do_schade(self): print "%s was vermoord bij de gemene meneer %s!!!\nR.I.P." %(self.naam, self.tegenstander.naam) 

  def move(self):
    while True:
      naartoe = raw_input("> ").lower().split()
      if naartoe[0] == "go":
          #vertelt waar je gaat
          if naartoe[1] in kamers[currentKamer]:
              #veranderd kamer naar niewe kamer
              currentKamer = kamers[currentKamer][naartoe[1]]
          #wanneer dat niet werkt
          else:
              print("You can't go that way!")

  def plaats(self):
    print("---------------------------")
    print("Je bent in de " + kamers[currentKamer]["naam"])
    print("---------------------------")

#commando's 
Commands = { 
  'quit': Speler.quit, 
  'help': Speler.help, 
  'status': Speler.status, 
  'rest': Speler.rest, 
  'verken': Speler.verken, 
  'flee': Speler.flee, 
  'attack': Speler.attack,
  'move' : Speler.move,
  'plaats' : Speler.plaats,
  } 

#dict voor layout
kamers = {

            1 : {  "naam"  : "Lobby" ,
                   "trap"  : 2,
                   "gangrechtdoor" : 3 }  ,

            2 : {  "naam"  : "Trap" ,
                   "lobby"  : 1,
                   "item"  : "Sword" }  ,            

            3 : {  "naam"  : "Gang rechtdoor" ,
                   "lobby" : 1,
                   "gymzaal" : 4, 
                   "concergie"  : 5,
                   "gangaula"  : 6 } ,

            4 : {  "naam"  : "Gymzaal" ,
                   "gangrechtdoor" : 3 } ,

            5 : {  "naam"  : "Concierge" ,
                   "hokjewim" : 9,
                   "gangrechtdoor" : 3 } ,

            6 : {  "naam"  : "Gang rii aula" ,
                   "gangrechtdoor" : 3,
                   "juul" : 7 } ,

            7 : {  "naam"  : "Hok van Juul" ,
                   "gangaula" : 6,
                   "kantine" : 8 } ,

            8 : {  "naam"  : "Aula kantine" ,
                   "juul" : 7,
                   "hokjewim" : 9 } ,

            9 : {  "naam"  : "Aula wim's spiek hokje" ,
                   "kantine" : 8,
                   "concierge" : 5 }
         }

#introductie
p = Speler() 
p.naam = raw_input("Wat is de naam ? ")
os.system('clear')
print ("--------------------")
print "(type help voor een lijst van acties)" 
print "%s betreedt het schoolgebouw, zoekend naar Henk van Ommen." % p.naam 
print "Steen van de verkener groet %s, hij vertelt jou dat je in de lobby bent." % p.naam
print ("--------------------")
time.sleep(1)
os.system('clear')
print("Hoe moet je lopen?")
print("'go [waar je naartoe wilt]'")
print("Je bent momenteel in de " + kamers[currentKamer]["naam"])
time.sleep(1)
os.system('clear')
print("Steen van de verkener wenst je succes en zegt: vergeet niet dat help alle commando's toont")

while(p.levens > 0): 
  line = raw_input("> ") 
  args = line.split() 
  if len(args) > 0: 
    commandFound = False 
    for c in Commands.keys(): 
      if args[0] == c[:len(args[0])]: 
        Commands[c](p) 
        commandFound = True 
        break 
    if not commandFound: 
      print "%s dat is een 1 op de toets.(typ iets van help ofzo)" % p.naam

结束

0 个答案:

没有答案