注意:这是一个很长的问题。
我正在通过制作游戏来练习python。我需要从另一个函数(我称为spawn()
)中获取一个变量,并在另一个函数(我称为damage_taken()
中使用)。
这是文件enemy.py
。它的主要工作是产生敌人:
import random
import player
class Enemy(object):
def types(self):
type = ["slime", "ghost", "demon"]
enemy = random.choice(type)
return enemy
class Slime(Enemy):
def types(self):
colour = ["red", "green", "blue"]
type = random.choice(colour)
return type
def health(self):
health = random.randint(1,5)
return health
class Ghost(Enemy):
def types(self):
form = ["spirit", "spectre", "phantom"]
type = random.choice(form)
return type
def health(self):
health = random.randint(10,30)
return health
class Demon(Enemy):
def types(self):
being = ["demon", "hell hound", "wendigo"]
type = random.choice(being)
return type
def health(self):
health = random.randint(15,35)
return health
这是重要的代码。我需要从此函数中获取变量health
并将其用于其他函数。
def spawn():
enemy = Enemy()
bad = enemy.types()
if bad == "slime":
slime = Slime()
target = slime.types()
health = slime.health()
print(f"A {target} {bad} has appeared. It has {health} HP")
return health
elif bad == "ghost":
ghost = Ghost()
target = ghost.types()
health = ghost.health()
print(f"A {target} has appeared. It has {health} HP")
return health
elif bad == "demon":
demon = Demon()
target = demon.types()
health = demon.health()
print(f"A {target} has appeared. It has {health} HP")
return health
这是我在努力的地方。我试图从函数health
中获取变量spawn()
,并在以下函数中使用它。但是,它不断告诉我health
不存在。如何从另一个函数中获取变量并在该函数中使用它。
def damage_taken():
spawn()
health = spawn.health - player.fight()
return health
damage_taken()
代码
spawn.health
是我尝试将变量调用到函数中的失败尝试。
代码:
player.fight()
正在从名为player.py
的其他文件中调用函数。它的主要目的是处理与玩家有关的机制,例如创建角色并确定他们造成的伤害。
答案 0 :(得分:4)
def damage_taken():
health = spawn() - player.fight()
return health
damage_taken()
这应该有效;您可能已经混淆了用于访问类成员变量的点符号。
答案 1 :(得分:0)
如果我很好地理解了您的问题,则只需将spawn函数的返回值分配给变量:
def damage_taken():
spawn_health = spawn()
health = spawn_health - player.fight()
return health
答案 2 :(得分:0)
我猜您实际上是宁愿使用spawn
函数,而不是敌人的health
来返回敌人对象,所以我建议以下做法:
def spawn():
enemy = Enemy()
bad = enemy.types()
if bad == "slime":
enemy = Slime() # each of these now is assigned to the same variable name, "enemy"
target = slime.types()
health = slime.health()
print(f"A {target} {bad} has appeared. It has {health} HP")
elif bad == "ghost":
enemy = Ghost()
target = ghost.types()
health = ghost.health()
print(f"A {target} has appeared. It has {health} HP")
elif bad == "demon":
enemy = Demon()
target = demon.types()
health = demon.health()
print(f"A {target} has appeared. It has {health} HP")
return enemy
def damage_taken():
enemy = spawn()
health = enemy.health - player.fight()
return health
damage_taken()
现在,仍然存在问题,在调用damage_taken()
之后,敌方对象将完全掉落。如果您希望敌人继续存在,则可能需要在damage_taken
函数范围之外初始化玩家和敌人。像这样:
enemy = spawn()
damage_taken(enemy)