python - OOP,属性/功能帮助。硬编码...不知道该怎么做。(第一次尝试)
问题描述
OOP 的第一次尝试。我正在与具有多种“能力”的英雄一起编写游戏。我有很多重复,不知道如何简化。我目前正在写新的每个能力,我知道这很糟糕......提前谢谢......
我觉得有一种方法可以调用类似...“self.ability(cost,damage,defender modifier, special effect)”。而且,所有的“能力”都需要经过几次“检查”才能成功。这在这里也很笨重,但我不知道如何清理它。提前致谢...
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...”来运行。这显然是非常重复的编码。谢谢。
解决方案
一种方法是将测试抽象为一种新方法:
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
推荐阅读
- javascript - 试图让嵌套的 if 语句工作
- c++ - 如何替换已分配的数组?
- xamarin - Xamarin Forms WebView 无法将相机用于 HTML 文件输入类型
- java - 从android中的视频uri生成缩略图并将其转换为base64
- r - 创建一个可在 R 中发布的表
- elasticsearch - Elasticsearch 父子 has_child 不返回任何结果
- python - 尽管 dash.PreventUpdate 阻止了其他函数,但仍强制执行初始回调
- java - Android Studio 在创建条形图时退出
- c - While循环导致函数在c中返回0
- python - 向量化函数的麻烦