如何确定我正在处理的对象的哪个实例?

时间:2014-09-09 10:14:48

标签: class python-3.x instance

我正在制作基于文本的地下城爬虫类游戏。在这个游戏中我有一个敌人类和一个玩家类。如果我实例化几个敌人并将它们与我的玩家一起放在网格结构中,我如何检测玩家遇到的敌人类的哪个实例,以便我可以将实例作为参数传递给各种函数。例如:

    class Enemy:
        def __init__(self, name, x, y):
            self.name = name
            self.x = x
            self.y = y

    e = Enemy('goblin', 0, 0)
    e1 = Enemy('troll',0, 1)
    enemies = (e, e1)
    grid = [[' '] * 10 for i in range(10)]
    grid[e.x][e.y] = e.name
    grid[e1.x][e1.y] = e1.name

    someFucntion(player, enemy)

正如你所看到的,对于此时拥有敌人实例的函数,我必须手动传入实例。但这意味着如果elif语句很好地确定它是哪个实例。考虑到我希望有20 +敌人的实例,这显然效率不高或者不好。

那么是否有一个方法或函数可以让我检测/获取要传递的实例?提前感谢您的时间和专业知识。希望这个问题不是主题或太模糊。

1 个答案:

答案 0 :(得分:1)

好吧,我在网上python导师的项目之外做了一些搞乱,我发现如果我在我的列表'敌人'上迭代,我可以检查他们与玩家的坐标,如果匹配,我可以将它们传递给在这种情况下,一个变量'currentEnemy',它似乎工作。这是代码:

    class Player:
        def __init__(self, name, x, y):
            self.name = name
            self.x = x
            self.y = y

    class Enemy:
        def __init__(self, name, x, y):
            self.name = name
            self.x = x
            self.y = y

    def combat(player, enemy):
         print('%s dies.' % (enemy.name))


    p = Player('tom', 0, 1)
    e = Enemy('goblin', 0, 0)
    e1 = Enemy('troll', 0, 1)
    currentEnemy = ()
    enemies = (e, e1)
    grid = [[' '] * 10 for i in range(10)]

    grid[e.x][e.y] = e.name
    grid[e1.x][e1.y] = e1.name

    for i in enemies:
        if i.x == p.x and i.y == p.y:
        currentEnemy = i

    combat(p, currentEnemy)

这让我得到了我预期的输出,即'troll die'

希望这对有这个问题的其他人有帮助。