在Python 2.7中使用变量引用类属性
我正在开发一个基于文本的游戏,但我还没有找到一个非常有效的解决方案来解决我的战斗系统。我目前的声明设置如下:在Python 2.7中使用变量引用类属性,python,class,variables,Python,Class,Variables,我正在开发一个基于文本的游戏,但我还没有找到一个非常有效的解决方案来解决我的战斗系统。我目前的声明设置如下: class Weapon1: damage = 4 price = 5 class Weapon2: damage = 4 price = 5 class Enemy1: damage = 2 health = 5 class enemy2: damage = 3 health = 6 def fight():
class Weapon1:
damage = 4
price = 5
class Weapon2:
damage = 4
price = 5
class Enemy1:
damage = 2
health = 5
class enemy2:
damage = 3
health = 6
def fight():
Weapon = raw_input("What weapon would you like to use?")
if Weapon == "Weapon 1":
if enemy = "Enemy1":
Enemy1.health -= Weapon1.damage
else:
Enemy2.health -= Weapon1.damage
else:
if enemy = "Enemy1":
pass
else:
pass
class pistol:
damage = 4
price = 5
class cannon:
damage = 4
price = 5
class Enemy1:
damage = 2
health = 5
class enemy2:
damage = 3
health = 6
def fight():
Weapon = raw_input("What weapon would you like to use?")
enemy.health -= weapon.damage
我有更多的敌人和类,所以我希望有一个语句可以使用变量引用类的属性。我决定不上传实际的功能,因为它超过100行长。
我所追求的伪代码如下所示:
class Weapon1:
damage = 4
price = 5
class Weapon2:
damage = 4
price = 5
class Enemy1:
damage = 2
health = 5
class enemy2:
damage = 3
health = 6
def fight():
Weapon = raw_input("What weapon would you like to use?")
if Weapon == "Weapon 1":
if enemy = "Enemy1":
Enemy1.health -= Weapon1.damage
else:
Enemy2.health -= Weapon1.damage
else:
if enemy = "Enemy1":
pass
else:
pass
class pistol:
damage = 4
price = 5
class cannon:
damage = 4
price = 5
class Enemy1:
damage = 2
health = 5
class enemy2:
damage = 3
health = 6
def fight():
Weapon = raw_input("What weapon would you like to use?")
enemy.health -= weapon.damage
您可以使用一个简单的
dict
,在这里使用namedtuple
,使代码更易于阅读:
from collections import namedtuple
Weapon = namedtuple('Weapon', ['damage', 'price'])
weapons = {
'pistol': Weapon(4, 5),
'cannon': Weapon(4, 5),
# ...
}
def fight():
weapon_name = raw_input("What weapon would you like to use?")
enemy.health -= weapons[weapon_name].damage
在战斗前制造武器、敌人职业和初始技能()
这不是你使用类的方式。所以如果用户输入“cannon”,这会对碰巧是敌人的人造成4点伤害?此外,这可以用于布尔值吗?我有一个owned属性。另外,namedtuple做什么?