【发布时间】:2019-10-04 20:09:09
【问题描述】:
OOP 的第一次尝试。 我正在与具有多种“能力”的英雄一起编写游戏。我有很多重复,不知道如何简化。我目前正在写新的每个能力,我知道这很糟糕...... 提前谢谢...
我觉得有一种方法可以称为... “self.ability(成本,伤害,防御者修正,特殊效果)” 而且,所有的“能力”都需要经过多次“检查”才能成功。这在这里也很笨重,但我不知道如何清理它。 提前谢谢...
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 个技能都需要通过相同的“if self.is_stunned...”来运行。这显然是非常重复的编码。 谢谢。
【问题讨论】:
-
除非您发布的代码有特定问题,否则您的问题可能属于codereview.stackexchange.com
-
谢谢 - 我会在允许时发帖...限制我每 40 分钟发帖...
标签: python oop attributes