在小游戏中轮流攻击(Python2.7)

2024-05-16 12:39:21 发布

您现在位置: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函数下,它成功了。但我认为我不应该一遍又一遍地重复同样的代码,必须有更好的方法来做到这一点。在


Tags: 代码nameselftargetforifdef玩家
1条回答
网友
1楼 · 发布于 2024-05-16 12:39:21

kill方法从while循环中取出,使每次调用该方法时它都只是一次攻击,而不是直到对方死亡。在

然后将整个游戏放入while循环中,为结束条件添加一些哨兵值,例如:

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

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

编辑:

死选项1

也就是说,Dead方法只打印一条消息。除了向用户显示某某已经死了之外,你不能再使用这个。但是如果你想这样做,可以在attackerskill方法中调用它。或者在游戏循环中。如果你想在实例死亡时自动调用它,那么我会用一个方法来结束所有的伤害:

^{pr2}$

然后使用

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

死选项2

如果你想让said 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

然后你可以让游戏来决定如何处理这个人已经死亡的事实。如果你想开始添加多个敌人(大多数游戏最终都会这样做),你可以考虑把它们放在一个集合(列表或字典)中,如果每个敌人还活着,你可以循环使用,如果敌人死了,就把它们移走。那么你的结束条件可以是

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

这种方式给你一个简单的方式来产生更多的敌人,以及游戏。在

相关问题 更多 >