2015-06-19 103 views
0

基本上我想从健康检查函数返回一个值,这样我就可以阻止攻击海誓山盟的小宠物了。你会看到我已经遗漏了“if”这一行的其余部分,因为我不确定要放在这里。我需要一种方法来从healthcheck函数返回一个函数,但是我无法使return语句正常工作。如何从函数中返回一个值并在while循环中引用它

class enemy(): 
    global enemylives 
    global dead 
    dead=0 
    enemylives=10 
    def healthcheck(): 
     if enemylives<=0: 
     print("You defeated the enemy!") 


while True: 
       time.sleep(1) 
       enemy1.attacked() 
       enemy1.healthcheck() 
       if 
        break; 
       time.sleep(1) 
       squirtle.attacked() 
       squirtle.healthcheck() 

(这不是我的全部代码)

+1

您应该学习如何在尝试类之前使用函数和循环http://anandology.com/python-practice-book/ –

回答

2

不知道你的游戏的逻辑是,但你应该创建属性,避免使用全球,使用实例的属性和方法。您可以使用sys.exit退出循环,如果你的敌人的生命得到0

import time 
import sys 
from random import random 

class Enemy(): 
    def __init__(self): 
     self.dead = 0 
     self.life = 100 

    def attack(self): 
     if random() > .20: 
      self.life -= 10 
      print("Attack successful, enemy life decreased by 10 to {}".format(self.life)) 
     elif self.life <= 90: 
      self.life += 10 
      print("Attack unsuccessful, enemy increases life to {}".format(self.life)) 

    def health_check(self): 
     if self.life <= 0: 
      print("You defeated the enemy!") 
      sys.exit() 


enemy1 = Enemy() 
while True: 
    time.sleep(1) 
    enemy1.attack() 
    enemy1.health_check() 
    time.sleep(1) 

输出示例:

Attack successful, enemy life decreased by 10 to 90 
Attack unsuccessful, enemy increases life to 100 
Attack successful, enemy life decreased by 10 to 90 
Attack successful, enemy life decreased by 10 to 80 
Attack successful, enemy life decreased by 10 to 70 
Attack successful, enemy life decreased by 10 to 60 
Attack successful, enemy life decreased by 10 to 50 
Attack unsuccessful, enemy increases life to 60 
Attack unsuccessful, enemy increases life to 70 
Attack successful, enemy life decreased by 10 to 60 
Attack successful, enemy life decreased by 10 to 50 
Attack successful, enemy life decreased by 10 to 40 
Attack successful, enemy life decreased by 10 to 30 
Attack successful, enemy life decreased by 10 to 20 
Attack unsuccessful, enemy increases life to 30 
Attack successful, enemy life decreased by 10 to 20 
Attack successful, enemy life decreased by 10 to 10 
Attack successful, enemy life decreased by 10 to 0 
You defeated the enemy! 

你也可以将它通过增加设置的攻击成功的几率困难属性或减少什么你比较随机的()到:

class Enemy(): 
    def __init__(self,diff): 
     self.dead = 0 
     self.life = 100 
     self.diff = diff 

    def attack(self): 
     if random() > self.diff: 
      self.life -= 10 
      print("Attack successful, enemy life decreased by 10 to {}".format(self.life)) 
     elif self.life <= 90: 
      self.life += 10 
      print("Attack unsuccessful, enemy increases life to {}".format(self.life)) 

    def health_check(self): 
     if self.life <= 0: 
      print("You defeated the enemy!") 
      sys.exit() 


enemy1 = Enemy(.20) 

如果你想在同时打破,在方法返回并用,如果检查:

class Enemy(): 
    def __init__(self,diff): 
     self.dead = 0 
     self.life = 100 
     self.diff = diff 

    def attack(self): 
     if random() > self.diff: 
      self.life -= 10 
      print("Attack successful, enemy life decreased by 10 to {}".format(self.life)) 
     elif self.life <= 90: 
      self.life += 10 
      print("Attack unsuccessful, enemy increases life to {}".format(self.life)) 


    def health_check(self): 
     if self.life <= 0: 
      print("You defeated the enemy!") 
      return True 
     return False 

enemy1 = Enemy(.3) 
while True: 
     time.sleep(1) 
     enemy1.attack() 
     if enemy1.health_check(): 
      break 
     time.sleep(1) 
+0

我会返回一个布尔值而不是在方法内调用'sys.exit()'并让主循环决定使用'break','sys.exit()'或其他。 –

+1

@PabloDíazOgni,是的,它实际上只是一个如何使用属性的例子,无论如何我都添加了替代。 –

相关问题