一个一个的敌人名单

2024-09-29 23:19:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望有人能回答我的问题。对于我正在制作的一个基于文本的视频游戏,我试图在英雄击中我地图上的某个位置时,得到一个与英雄战斗的敌人列表。我创建了一个父类角色,然后创建了两个子类英雄和敌人。我有一个敌人的名单和另一个对应的curHp名单。我是python的新手,很难知道把敌人的名字列表和他们的curHp列表放在哪里。任何帮助都将不胜感激。你知道吗

class Character (object):

    def __init__(self, name, curHp):
        self.__name = name
        self.__curHp = curHp


    def getName(self):
        return self.__name
    def getCurHp(self):
        return self.__curHp

    def setName(self, newName):
        newName= self.__newName

    def setCurHp(self, newCurHp):
        H = ""
        self.__newCurHp=self.__curHp + 20

class Hero (Character):

    def __init__(self, name, curHp, stun, laser, vsurge):
        super().__init__(name, curHp, stun, laser, vsurge)
        self.__stun=stun
        self.__laser= laser
        self.__vsurge= vsurge


    def getStun(self):
        return self.__stun
    def getLaser(self):
        return self.__laser
    def getVsurge(self):
        return self.__vsurge


    def setStun(self,newStun):
        self.__newStun=self.__newStun
    def setLaser (self,newLaser):
        self.__newLaser= self.__newLaser
    def setVsurge(self, newVsurge):
        self.__newVsurge = self.__vsurge + 25

class Enemy(Character):

    def __init__(self, name, curHp, attack):
        super().__init__(name, curHp, attack)
        self.__attack=attack


    def getAttack(self):
        return self.__attack


    def setAttack (self, newAttack):
        newAttack= self.__newAttack

我尝试将列表放入def main():但不断出现错误

player=Hero ("Agent Five", 120, 20 ,10 ,25 )
enemy=Enemy (name=["Raptor", "T-Rex", "Enemy Solider", "General", "Dual Sentience", "Empty Robot", "The Sentience", "GOD"],curHp=[40, 100, 25, 60, 75, 45, 130, 200], []  )

 At line:1 char:2
+ [40, 100, 25, 60, 75, 45, 130, 200]cd 'd:\Time Breakers Game\TimeBrea ...
+  ~
Missing type name after '['.
At line:1 char:4
+ [40, 100, 25, 60, 75, 45, 130, 200]cd 'd:\Time Breakers Game\TimeBrea ...
+    ~
Missing argument in parameter list.
    + CategoryInfo          : ParserError: (:) [],         ParentContainsErrorRecordException
+ FullyQualifiedErrorId : MissingTypename

任何提示都将不胜感激。谢谢

更新:敌人名单中的最后一个空名单将最终成为每个敌人的攻击点。你知道吗


Tags: nameself列表returninitdefclasslaser
2条回答

我将创建一个函数,返回一个包含字符的字典。你知道吗

您不需要在init中声明攻击

class Enemy(Character):

    def __init__(self, name, curHp, attack):
        super().__init__(name, curHp)
        self.__attack = attack

    def enemy_dict(self, names, hps):
        """ Takes in a list of names and a list of HP and returns a dictionary of pairs"""
        return dict(zip(names, hps))

让敌人一次攻击一个玩家。调用字典上的for循环,在本例中,我使用random.choice随机选取一个数量,然后将其作为对播放器的伤害

import random

print(player.getName(), player.getCurHp())

for k, v in enemy.enemy_dict(enemy.getName(), enemy.getCurHp()).items():
    att_damage = random.choice(range(0, v, 5))
    if att_damage == 0:
        print('No Damage Taken')
    else:
        new_hp = player.getCurHp() - att_damage
        player.setCurHp(new_hp)
        print(player.getName(), "Took Damage of ", new_hp, "From Enemy", k)\

print(player.getName(), player.getCurHp())

您还需要在类模块中以相反的方式更改setter。你知道吗

应该是

def setName(self, newName):
    self.__newName = newName 

def setCurHp(self, newCurHp):
    H = ""
    self.__curHp = newCurHp

要创建敌人列表,不能使用值列表调用Enemy构造函数;相反,必须为敌人调用一次Enemy构造函数。您可以使用zip来简化这个过程。你知道吗

此外,不能将位置参数放在关键字参数之后,要么使用name=…, curHp=…, attack=…,要么只使用…, …, …,而不是name=…, curHp=…, …。你知道吗

最后,我不知道你想让[]对攻击做什么。也许每个人都是0?不管你想要什么,你都必须明确地说出来。你知道吗

所以:

enemy_names = ["Raptor", "T-Rex", "Enemy Solider", "General", "Dual Sentience", "Empty Robot", "The Sentience", "GOD"]
enemy_hps = [40, 100, 25, 60, 75, 45, 130, 200]

enemies = []
for name, hp in zip(enemy_names, enemy_hps):
    enemies.append(Enemy(name, hp, 0)) 

如果您知道什么是列表理解,您可能会看到最后三行可以重写:

enemies = [Enemy(name, hp, 0) for name, hp in zip(enemy_names, enemy_hps]

或者,如果您有一个攻击列表,如名称和hp列表:

enemies = [Enemy(*props) for props in zip(enemy_names, enemy_hps, enemy_attacks)]

相关问题 更多 >

    热门问题