OOP,属性/函数帮助.硬编码..不知道该怎么办. (第一次尝试)



第一次尝试OOP。 我正在与拥有多种"能力"的英雄一起编写游戏。我有很多重复,不知道如何简化它。我目前正在写出每个能力,我知道这很糟糕...... 提前感谢...

我觉得有一种方法可以称呼类似的东西... "自身能力(成本、伤害、防御修正、特效(" 此外,所有"能力"都需要经过几次"检查"才能成功。这在这里也很笨拙,但我不确定如何清理它。 提前感谢...

def lightning_bolt(self):
if self.is_stunned:
print("Stunned...ability unsuccessful.")
elif self.is_confused:
confused_test = roll_d_x(2)
if confused_test == 1:
print("Confused...ability unsuccessful.")
else:
defender.mobility = (defender.mobility / 2)
success = self.success_check()
defender.mobility = (defender.mobility * 2)
if success:
volatile_roll = roll_d_x(10)
if volatile_roll == 1:
self.volatile_magic()
else:
defender.lose_health(((self.energy * 0.5) + 10))
self.lose_energy(25)
stun_test = roll_d_x(4)
if stun_test == 1:
defender.is_stunned = True
else:
print("Ability failed.")
def fireball(self):
if self.is_stunned:
print("Stunned...ability unsuccessful.")
elif self.is_confused:
confused_test = roll_d_x(2)
if confused_test == 1:
print("Confused...ability unsuccessful.")
else:
defender.mobility = (defender.mobility * (3/2))
success = self.success_check()
defender.mobility = (defender.mobility * (2/3))
if success:
volatile_roll = roll_d_x(10)
if volatile_roll == 1:
self.volatile_magic()
else:
defender.lose_health((self.energy * (7/10)) + 5)
defender.is_terrified = True
self.lose_energy(30)
else:
defender.lose_health(self.energy * (1/4))
print("Ability failed. Damage reduced.")

它做了我想要的,但我知道有更好的方法。有 3 个英雄和 15 个技能都需要通过相同的"如果self.is_stunned......"运行。东西。这显然是非常重复的编码。 谢谢。

一种方法是将测试抽象为新方法:

def check_status_effects(self):
status = False
if self.is_stunned:
print("Stunned...ability unsuccessful.")
status = True
elif self.is_confused:
confused_test = roll_d_x(2)
if confused_test == 1:
print("Confused...ability unsuccessful.")
status = True
return status

然后,由于我假设您不希望能力在具有状态效应时成功,请检查能力方法中check_status_effects的返回:

def fireball(self):
if self.check_status_effects():
return
# rest of ability code here

最新更新