Почему этот метод родительского класса работает по-разному в дочерних классах?Python

Программы на Python
Anonymous
Почему этот метод родительского класса работает по-разному в дочерних классах?

Сообщение Anonymous »

Я пишу текстовую ролевую игру и настраиваю три класса: класс персонажа, игрока и врага. У меня есть метод под названием «атака», который захватывает цель, а затем удаляет из нее определенное количество здоровья. Он отлично работает, когда игрок атакует врага, но когда враг атакует игрока, он добавляет ему здоровье, а не отнимает его. Обе атаки происходят одновременно, возможно, это часть проблемы, но я не понимаю, как это может быть. Я хочу, чтобы обе характеристики здоровья снижались за каждую последовательность атак.

Код: Выделить всё

import random
class Character():

#initialize a blank character
def __init__(self, level, health, strength, defense):
self.level = level
self.health = health * 100
self.strength = strength
self.defense = defense

def attack(self, target):
target.health = target.health-(self.strength * 1.5 - target.defense)

class Player(Character):

#initialize the constructor of the player
def __init__(self, level, health, strength, defense):
self.level = level
self.health = health * 100
self.strength = strength
self.defense = defense

def get_xp(self):
pass

def walk():
pass

class Enemy(Character):

#initialize the constructor of the enemy
def __init__(self, level, health, strength, defense):
self.level = level
self.health = health * 100
self.strength = strength
self.defense = defense

Код: Выделить всё

import time
import random
from character import *

#creating a player

new_player = Player(1,10,10,10)

#establishing enemy stats
enemy_level_mod = random.randint(1,5)

if new_player.level > 5:
enemy_level = new_player.level - random.randint(1,5)
else:
enemy_level = 1

enemy_health = enemy_level * random.randint(1,4)
enemy_strength = enemy_level * random.randint(1,4)
enemy_defense = enemy_level * random.randint(1,4)

#running the game loop
while True:
new_enemy = Enemy(enemy_level,enemy_health,enemy_strength,enemy_defense)
while new_enemy.health > 0:
print(f"Player Health is:{new_player.health}")
print(f"Enemy Health is: {new_enemy.health}")
new_player.attack(new_enemy)
new_enemy.attack(new_player)
time.sleep(1)
else:
print("Enemy has been vanquished")
time.sleep(1)
Изначально у меня не было родительского класса, но я решил, что, поскольку они оба собираются атаковать, было бы разумнее сделать их дочерними элементами класса с общими методами.< /п>

Подробнее здесь: https://stackoverflow.com/questions/790 ... n-children

Вернуться в «Python»