ПЕРВАЯ ПОПЫТКА на ООП. Я пишу игру с героями, которые имеют несколько «способностей». Я много повторяюсь и не знаю, как это упростить. Сейчас я пишу каждую новую способность, и я знаю, что это очень плохо ... Заранее спасибо ...
Я чувствую, что есть способ назвать что-то вроде ... "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 ...». Это явно очень повторяющееся кодирование. Спасибо.