【问题标题】:an enemy class in a RPG-game角色扮演游戏中的敌人等级
【发布时间】:2020-02-04 11:51:39
【问题描述】:

我正在用 Python 制作一款 RPG 游戏。 我做了不同的课程,但我遇到了我的一种敌人类型的问题。它是一只蜘蛛,为了增加趣味,我试着让蜘蛛做点(随着时间的推移造成伤害)。它不能保证中毒伤害,但是当它确实使你中毒时,它会叠加。 这是我的父类(敌人):

class Enemy():
    def __init__(self, number_of, name):
        self.number_of = int(number_of)
        self.name = name
        self.hp = 20 * self.number_of
        self.dmg = 2 * self.number_of
    def attack(self):
        print(f"you now have {round(class1.hp)} health" + "\n")
    def appearing(self):
        if self.number_of > 1:
            print (f"{self.number_of} {self.name}s have appeared")
        else:
            print(f"A {self.name} has appeared")
        print (f"They have {self.hp} health")

注意:class1 是播放器

这是我的蜘蛛类:

class Spider(Enemy):
    posion_dmg = 0
    def __init__(self, number_of, name):
        Enemy.__init__(self, number_of, name)
        self.posion_dmg = 0
    def attack(self,player):
        if self.posion_dmg > 0:
            dot = 2 ** (self.poison_dmg + 1)
            player.hp -= dot
            print ("you are posioned" + "\n")
            print (f"it deals {round(dot)} damage")
        dmg = random.uniform(1.2 * self.dmg, 1.8* self.dmg)
        player.hp -= dmg
        print ("The spider(s) bite(s) you. ")
        print(f"It deals {round(dmg)} damage")
        if randint(1,4) == 1:
            self.poison_dmg += 1
            if self.number_of == 1:
                print ("The spider poisons you")
            else:
                print ("The spiders poison you")
        return Enemy.attack(self)
    def appearing(self):
        print ("*Spiders have a chance to hit you with poison that deals damage over time - this stack exponentially*")
        return Enemy.appearing(self)

当我和蜘蛛战斗时,randint为1,它说“蜘蛛”没有属性“poison_dmg”,但我把它变成了一个属性,对吧?

【问题讨论】:

  • "posion_dmg" 是你的属性

标签: python class subclass


【解决方案1】:

我是 python 的新手,但我已经成功完成了“制作你自己的 Python 文本冒险”指南,并且我对它的工作原理有了基本的了解,尽管我不完全理解你是如何制作的点工作,我认为你的问题是:

class Spider(Enemy):
    posion_dmg = 0
    def __init__(self, number_of, name):
        Enemy.__init__(self, number_of, name)
        self.posion_dmg = 0  <-----------------------HERE

结合这个:

def attack(self,player):
        if self.posion_dmg > 0:
            dot = 2 ** (self.poison_dmg + 1)
            player.hp -= dot
            print ("you are posioned" + "\n")
            print (f"it deals {round(dot)} damage")
        dmg = random.uniform(1.2 * self.dmg, 1.8* self.dmg)
        player.hp -= dmg
        print ("The spider(s) bite(s) you. ")
        print(f"It deals {round(dmg)} damage")
        if randint(1,4) == 1:     <----------------------------HERE
            self.poison_dmg += 1
            if self.number_of == 1:
                print ("The spider poisons you")
            else:
                print ("The spiders poison you")

if 语句缩进在一个以另一个 iftoxic_dmg > 0 开头的 def 中,并不是因为您已经在 init 中将其定义为 0。 我会颠倒攻击函数中 if 语句的顺序,所以首先生成一个toxic_dmg 值,然后评估该值是否大于 0。

希望它有效!

PD1:这是我第一次在 stackoverflow 上发表评论,如果我错过了一些回答标准,请见谅。

PD2:英语不是我的母语,如果我没有说清楚,请告诉我。

【讨论】:

    猜你喜欢
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 2013-02-02
    相关资源
    最近更新 更多