更改函数字典-Python
所以我在业余时间创建了一个相当基本的rpg,但我遇到了一个绊脚石。我想通过每次玩家进入/退出战斗时更改命令字典,使其在特定时间只能访问特定功能。然而,我为搜索字典键而设置的循环似乎不适用于任何命令,除了最初编写的命令 主文件:更改函数字典-Python,python,dictionary,global-variables,Python,Dictionary,Global Variables,所以我在业余时间创建了一个相当基本的rpg,但我遇到了一个绊脚石。我想通过每次玩家进入/退出战斗时更改命令字典,使其在特定时间只能访问特定功能。然而,我为搜索字典键而设置的循环似乎不适用于任何命令,除了最初编写的命令 主文件: from commands import * Commands = { "travel": Player.travel, "explore": Player.explore, "help": Player.
from commands import *
Commands = {
"travel": Player.travel,
"explore": Player.explore,
"help": Player.help,
}
p = Player()
while (john_hero.health > 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 "John's too simple to understand your complex command."
command.py
class Player:
def __init__(self):
self.state = "normal"
john_hero = John()
self.location = "Town"
global Commands
Commands = {
"attack": Player.attack,
"flee": Player.flee,
"help": Player.help
}
def fight(self):
Player.state = "fight"
global Commands
enemy_a = Enemy()
enemy_name = enemy_a.name
print "You encounter %s!" % (enemy_name)
*注意:循环取自其他人的代码。我之所以使用它,是因为我创建游戏主要是为了学习
commands = {"travel":{"cmd":Player.travel, "is_available":True}}
for key in commands:
if commands[key]["is_available"]:
print "do stuff"
但是正如@arunkumar所指出的,如果没有更多的代码,就很难回答这个问题。您在
command.py
中的代码似乎试图修改在主文件中定义的全局变量,换句话说,类似这样:
这不起作用,因为您的代码现在有两个命令
变量,一个在command.py
范围内,一个在主文件
范围内。与其让两个文件共享一个全局变量(在我看来这是一个非常糟糕的想法),我建议您将命令
设置为播放器
的一个属性:
class Player:
def __init__(self):
...
self.Commands = {
"attack": Player.attack,
"flee": Player.flee,
"help": Player.help
}
修改命令的代码在哪里?@arunkumar啊,我刚刚添加了它。回想起来,我不把它包括在内是相当愚蠢的。