当我执行此代码(下面列出)时,我得到:
回溯(最近一次呼叫最后):文件" 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
结束