2016-09-25 309 views
0

我正在尝试创建一个基本的游戏,但我对Python编程场景相当陌生。我遇到过两个阶级(玩家和敌人阶级)的问题,我想从玩家和敌人那里获得类似健康的变量,反之亦然。有什么办法做到这一点?如何将变量从一个类传递到另一个类?

这里是更好地强调什么,我问代码:

class Player(object): 
     def __init__(self, image): 
      self.x = 100 
      self.y = 240 
      self.health = 30 
      self.defense = 25 
      self.image = image 
      self.black = (0, 0, 0) 
      self.draw() 

     def draw(self): 
      screen.blit(self.image, (self.x, self.y)) 
      line = pygame.draw.rect(screen, self.black, (80, 300, 100, 5)) 

     def attack(self): 
      pass 

    class Enemy(object): 
     def __init__(self, image): 
      self.x = 480 
      self.y = 240 
      self.health = 20 
      self.defense = 15 
      self.image = image 
      self.black = (0, 0, 0) 
      self.draw() 

     def draw(self): 
      screen.blit(self.image, (self.x, self.y)) 
      line = pygame.draw.rect(screen, self.black, (460, 300, 100, 5)) 

     def attack(self): 
      pass 

基本上,我不明白我怎么可以像从一个类中的“self.health”,并轻松访问来自其他班级。我尝试了一些使用返回方法等方法,但我很好奇,如果有任何简单的方法来做到这一点。帮助表示赞赏!

+0

这些不是”类变量“。您的标题有误导性。 “来自另一个班级的变量”是可以的。 – zvone

+0

您需要制作这些类的实例,并确保它们是公共的(这会使它们受到编辑)或私有的,这些封装它们并使它们对外部范围不可变。你需要方法来返回这些值,如果它们是私人的 –

+0

通常会有一个对象来处理整个游戏。我们称之为“游戏”。它可以访问'self.player = Player()'和'self.enemy = Enemy()'。然后很简单...'game.enemy.health' – zvone

回答

0

此代码创建一个类,并且在特殊的__init__方法中,它将值分配给各种成员变量

class Player(object): 
    def __init__(self, image): 
     self.x = 100 
     self.y = 240 
     self.health = 30 
     self.defense = 25 
     self.image = image 
     self.black = (0, 0, 0) 
     self.draw() 

这些成员变量也被称为属性在Python。如果你有一个Player实例的引用(Player类的一个实例):

p = Player() 

您可以访问属性所有你喜欢:

print(p.health) 

也许你需要某种形式的“主循环“或控制器类,可以访问玩家和敌人,并可以相应地设置其属性:

class MainLoop(object): 

    def __init__(self): 
    self.player_1 = Player() 
    self.enemy_1 = Enemy() 

    def run(self): 
    if fight(): # fight() is some function of your game 
     self.player_1.health -= 10 
     self.enemy_1.health -= 20 
相关问题