在迷你游戏中转发攻击(python 2.7)

时间:2014-10-25 20:58:32

标签: python

我一直在学习python而且我正在创建一个迷你游戏并且到目前为止做得很好。我需要一些想法让每个玩家转而攻击,首先是代码:

from random import randint
class Dragon:
    def __init__(self,name,health):
        self.name = name
        self.health = health
    def kill(self,target): 
        while target.health >= 0:
            if target.health <= 50:
                hit = randint(1,20)
                target.health -= hit
                print '%s hits %s for %s' %(self.name,target.name,hit)
            elif target.health <= 0:
                print '%s has killed %s' %(self.name,target.name)
            else:
                hit = randint(1,50)
                if hit >= 40:
                    target.health -= hit
                    print "%s critically hits %s for %s" %(self.name,target.name,hit)
                else:
                    target.health -= hit
                    print "%s hits %s for %s" %(self.name,target.name, hit)
    def Dead(self):
        if self.health <= 0:
            print "%s is dead" %self.name
class Hero:
    def __init__(self,name,health):
        self.name = name
        self.health = health
Diet = Dragon('Diet',200)
Pizza = Hero('Pizza', 100)
if __name__ == '__main__':
    Diet.kill(Pizza)

一旦我弄清楚如何给每个玩家转弯,我会向英雄级别添加更多方法,而我的第二个问题是打印出玩家死亡的区块无效,我试图嵌套它在每个if功能下它都有效。但我认为我不应该一遍又一遍地重复相同的代码,必须有更好的方法来实现它。

1 个答案:

答案 0 :(得分:0)

kill方法从while循环中取出,每次调用方法时都这样做,这只是一次攻击,而不是直到另一个人死了。

然后将整个游戏粘贴在一个while循环中,并为最终条件设置一些标记值,例如:

GameIsRunning = True
while GameIsRunning:
    #heros action
    #enemies action
    if EndConditionIsMet():
        GameIsRunning = False

在每个循环结束时检查游戏是否结束,例如如果所有敌人都死了或英雄已经死亡,并将GameIsRunning设置为假。

修改

死亡选项1

原样,Dead方法只打印一条消息。除了向用户表明某某已经死亡之外,你不能使用它。但是如果你想要这样,可以在攻击 ers kill方法中的某个地方调用它。或者在游戏循环中。如果你希望在实例死亡时自动调用它,那么我将在方法中包含任何损坏:

def DealDamage(self, damage):
    self.health -= damage
    self.Dead()

然后使用

def Kill(self, target):
    #damage picking logic stays the same
    target.DealDamage(damage)

死亡选项2

如果你想让Dead方法意味着事情发生或不发生,它应该有一个布尔签名,例如:

def IsDead(self):
    # Stick in a display message here if you like, or let the game do it
    if self.health <= 0:
        return True
    else:
        return False

然后你可以让游戏决定如何处理这个人死亡的事实。如果你想开始添加多个敌人(就像大多数游戏最终会有的那样),你可以考虑将它们粘贴在一个集合(一个列表或一个字典)中,循环通过这个来吸引每个敌人&#39;如果他们还活着就转过来,如果他们死了就把它们移走。然后,您的结束条件可以是

if Hero.IsDead() or len(Enemies) == 0:
    return True

通过这种方式,您可以轻松地在游戏中产生更多敌人。