Python RPG游戏,unbundLocalError
不知何故,当我执行此代码(如下所列)时,我得到: 回溯(最近一次调用last):文件“Test.py”,第207行,在 Commandsc文件“Test.py”,第116行,移动中 如果kamers[currentKamer]中的naartoe[1]:UnboundLocalError:赋值前引用的局部变量“currentKamer” 首先我想我可以添加“global”,但后来我得到了一个语法错误。 你能解释一下我做错了什么而不是仅仅编辑代码吗Python RPG游戏,unbundLocalError,python,python-2.7,Python,Python 2.7,不知何故,当我执行此代码(如下所列)时,我得到: 回溯(最近一次调用last):文件“Test.py”,第207行,在 Commandsc文件“Test.py”,第116行,移动中 如果kamers[currentKamer]中的naartoe[1]:UnboundLocalError:赋值前引用的局部变量“currentKamer” 首先我想我可以添加“global”,但后来我得到了一个语法错误。 你能解释一下我做错了什么而不是仅仅编辑代码吗 import os import time fr
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
导入操作系统
导入时间
从随机导入randint
电流Kamer=1
类别字符:
#资料
定义初始化(自):
self.naam=“”
self.levens=1
self.levens_max=1
#这是一个由斯佩勒和斯佩勒组成的系统(本·吕和斯佩勒是马克莱克)
def do_schade(自我,特根斯坦):
schade=min(
max(randint(0,self.levens)-randint(0,tegenstander.levens),0),
tegenstander.levens)
tegenstander.levens=tegenstander.levens-schade
如果schade==0:打印“%s ontwijkt%s的aanval.”%(tegenstander.naam,self.naam)
其他:打印“%s beschadigd%s!”%(self.naam,tegenstander.naam)
返回tegenstander.levens randint(1,self.tegenstander.levens):
打印“%s vlucht van%s.”%(self.naam,self.tegenstander.naam)
self.tegenstander=无
self.state='normal'
其他:打印“%s kon niet ontsnapen van%s!”%(self.naam,self.tegenstander.naam);self.tegenstander_攻击()
#安瓦伦
def攻击(自我):
如果self.state!='战斗:打印“%s zwaait in de lucht,maar hij geeft op.%self.naam;self.moe()
其他:
如果self.do_schade(self.tegenstander):
打印“%s vermoord%s!”%(self.naam,self.tegenstander.naam)
self.tegenstander=无
self.state='normal'
如果randint(0,self.levens)<10:
self.levens=self.levens+1
self.levens\u max=self.levens\u max+1
打印“%s voelt zich sterker!”%self.naam
else:self.tegenstander_攻击()
#艾尔斯泰格斯坦德杰杜德酒店
def tegenstander_攻击(自我):
如果self.tegenstander.do_schade(self):打印“%s是vermoord bij de gemene meneer%s!!!\n r.I.P.”%(self.naam,self.tegenstander.naam)
def移动(自我):
尽管如此:
naartoe=原始输入(“>”).lower().split()
如果naartoe[0]=“go”:
#韦特尔特瓦尔杰·加特酒店
如果naartoe[1]在kamers[currentKamer]中:
#韦兰德·卡默纳尔·尼韦·卡默尔酒店
currentKamer=kamers[currentKamer][naartoe[1]]
#温尼尔·尼特·韦克特酒店
其他:
打印(“你不能走那条路!”)
def plaats(自身):
打印(“-------------------------------”)
印刷体(“我弯在地上”+kamers[currentKamer][naam])
打印(“-------------------------------”)
#突击队
命令={
“退出”:Speler.quit,
“帮助”:Speler.help,
“状态”:Speler.status,
“rest”:Speler.rest,
“verken”:Speler.verken,
逃离:斯佩勒,逃离,
“攻击”:Speler.attack,
“移动”:Speler.move,
“plaats”:Speler.plaats,
}
#dict voor布局
卡默斯={
1:{“纳姆”:“大厅”,
"陷阱":二,,
“gangrechtdoor”:3},
2:{“纳姆”:“陷阱”,
“大厅”:1,
“物品”:“剑”},
3:{“乃阿姆”:“帮派进门”,
“大厅”:1,
“gymzaal”:4,
“共谋”:5,
“甘古拉”:6},
4:{“naam”:“Gymzaal”,
“gangrechtdoor”:3},
5:{“naam”:“礼宾部”,
“hokjewim”:9,
“gangrechtdoor”:3},
6:{“naam”:“Gang rii aula”,
“gangrechtdoor”:3,
“juul”:7},
7:{“naam”:“Hok van Juul”,
“甘高拉”:6,
“kantine”:8},
8:{“naam”:“Aula kantine”,
“尤尔”:7,
“hokjewim”:9},
9:{“纳姆”:“奥拉·维姆的斯皮克·霍克杰”,
“康德”:8,
“礼宾部”:5}
}
#导言
p=Speler()
p、 naam=原始输入(“naam是什么?”)
操作系统(“清除”)
打印(“--------------”)
“打印”(键入帮助voor een lijst van acties)
打印“%s betreedt het schoolgebouw,zoekend naar Henk van Ommen”。%p.naam
打印“Steen van de verkener groet%s,hij vertelt jou dat je in de Lobble bent.”%p.naam
打印(“--------------”)
时间。睡眠(1)
操作系统(“清除”)
打印(“Hoe moet je lopen?”)
打印(“'go[waar je naartoe wilt]”)
印刷体(“以德文书写的弯曲力矩表+kamers[currentKamer][naam]”)
时间。睡眠(1)
操作系统(“清除”)
印刷品(“Steen van de verkener wenst je success en zegt:vergeet niet dat help alle commando's toont”)
而(p.levens>0):
行=原始输入(“>”)
args=line.split()
如果len(args)>0:
commandFound=False
对于命令.keys()中的c:
如果args[0]==c[:len(args[0]):
命令[c](p)
commandFound=True
打破
如果未找到命令:
打印“%s dat仅为1 op de toets(典型的ZO帮助)”%p.naam
结束将
global currentKamer
放在函数move
@yedpodtrzitko的开始位置,这非常有效!我还为循环添加了一个中断,因为它丢失了!