我一直在学习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功能下它都有效。但我认为我不应该一遍又一遍地重复相同的代码,必须有更好的方法来实现它。
答案 0 :(得分:0)
将kill
方法从while循环中取出,每次调用方法时都这样做,这只是一次攻击,而不是直到另一个人死了。
然后将整个游戏粘贴在一个while循环中,并为最终条件设置一些标记值,例如:
GameIsRunning = True
while GameIsRunning:
#heros action
#enemies action
if EndConditionIsMet():
GameIsRunning = False
在每个循环结束时检查游戏是否结束,例如如果所有敌人都死了或英雄已经死亡,并将GameIsRunning
设置为假。
修改强>
原样,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)
如果你想让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
通过这种方式,您可以轻松地在游戏中产生更多敌人。