2016-09-22 49 views
1

我工作的一個基於文本的RPG遊戲,而我試圖創造魔法咒語影響統計信息,如羣攻,轉順序等我使用各種類格式的法術:Python:我如何創建適用於類中變量的效果?

class BuffSpell(object): 
    def __init__(self, **kwargs): 
     self.__dict__.update(kwargs) 

,我從一本字典調用法術

bardSpells = { 
    1: BuffSpell(name= "Flare", level= 0, stat= baseAttack, value -1) 
} 

我怎麼會用喇叭上的敵人,如妖精?我試圖使使用的goblinBuffSpell[1]參數的方法

def useBuffSpell(target, spell): 
    target.spell.stat = target.spell.stat + spell.value 

此外,通過咒語影響戰鬥序列中的下一個回合動作的好方法是什麼?

回答

0

使用getattrsetattr,並在屬性引用的拼寫str

bardSpells = { 
    1: BuffSpell(name= "Flare", level= 0, stat="baseAttack", value -1) 
} 

def useBuffSpell(target, spell): 
    setattr(target, spell.stat, 
      getattr(target, spell.stat, 0) + spell.value) 

setattr是一個內置的,給定對象,屬性的名稱和值,設置該屬性對象的價值。 getattr是一個內置的給定對象的屬性名稱和可選的缺省值(在上例中爲0),返回該對象的屬性,或者如果對象不具有該名稱的屬性則返回默認值。如果沒有給出默認值,則不存在的屬性訪問會產生一個AttributeError

上面的例子,如果你沒有useBuffSpell(goblin, bardSpells[1]),將由1降低goblin小號baseAttack,或者將其設置爲-1如果沒有一個baseAttack它。