为什么父类中的这个方法在子类之间的功能不同?

问题描述 投票:0回答:1

我正在编写一个基于文本的角色扮演游戏,并设置了三个类:角色类、玩家和敌人。我有一种称为“攻击”的方法,它接收一个目标,然后从其生命值中删除一定数量的目标。当玩家攻击敌人时它可以完美地工作,但是当敌人攻击玩家时,它会增加玩家的生命值而不是减少生命值。两种攻击同时发生,也许这是问题的一部分,但我不明白情况会怎样。我希望每个攻击序列的健康统计数据都会下降。

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)

最初我没有父类,但我想既然它们都会攻击,那么让它们成为具有通用方法的类的子类会更有意义。

python class game-development
1个回答
0
投票

使用您当前的代码,有可能

enemy.strength * 1.5 < new_player.defense
。您可以做的是使用
max(self.strength * 1.5 - target.defense, 1)
设置最小伤害值。

© www.soinside.com 2019 - 2024. All rights reserved.