获取一个战斗的敌人列表

时间:2018-05-13 19:29:24

标签: python python-3.x list

我希望有人能够回答我的问题。对于基于文本的视频游戏,我正在尝试获取一个敌人列表,以便在英雄击中我的地图上的某个位置时与英雄战斗。我创建了一个父类角色,然后是两个孩子类Hero和Enemy。我有一个敌人名单列表和另一个相应的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

任何提示都会非常感激。谢谢

更新:敌人列表中的最后一个空列表最终将成为每个敌人的攻击点。

2 个答案:

答案 0 :(得分:4)

要创建敌人列表,您无法使用值列表调用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)]

答案 1 :(得分:-1)

我会创建一个函数,返回带有HP的字符字典。

您无需在 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