2015-05-20 2 views
0

Я хотел уменьшить здоровье игроков, но я был не уверен, смог ли я это сделать, извините, если этот вопрос не ясен, но я новый кодер, и я медленно понимаю, как работают классы. Я думаю, мне нужно сделать это более ясным, насколько смогу.Переменные местоположения класса Python

class Health(object): 
#health of player and enemy 
#input of the both health so it is able to 
#be a preset for more combat 

    def __init__(self, player, enemy): 

     self.player = player 
     self.enemy = enemy 

class Attack_Type(object): 
#making a attack type blueprint 
#combat attacks can be modified 

    def melee(self, target): 
     #100% chance of landing hit 
     if target == player: 
      Health.player -= 1 
      return Health.player 
     elif target == enemy: 
      Health.enemy -= 1 
      return Health.enemy 

test = Health(10,10) 
enemy_melee = Attack_Type(Health.player) 

Мой вопрос: как получить доступ к значению переменных внутри класса, не делая его глобальным. Могу ли я изменить значение класса в классе? Это не изменяет здоровье игроков, потому что он не может получить доступ к здоровью игроков, но даже когда он это делает, он не возвращает значение в нужное место.

Теперь я понимаю, что гораздо проще сделать здоровье атрибут, извините, все я не совсем понимаю, как работают классы! Спасибо за помощь!

+0

Does 'player_health = bridge.attack (player_health)' делать то, что вы хотите? –

+0

@Paul Rooney нет трекбэка, говорящего, что «player_health» не определен в строке 14 – Alex

+0

Ok. Извините, я предположил, что вы не показывали весь свой код. Предполагается ли, что здоровье игрока является объектом какого-то типа или просто целой? Просто добавьте 'player_health = 0' где-нибудь до последней строки. Я не понимаю, что вы пытаетесь сделать. –

ответ

2

Надеюсь, это поможет! :)

class Health: 
    def __init__(self): #Constructor initializing the variables. 
     self.player_health = 10 
     self.enemy_health = 10 

class Combat: 
    #Attack function receives a health object called "hitter" 
    def attack(self, hitter): 
     hitter.player_health -= 1 #Health Object hitter's player_health reduced by one. 
     return hitter 

bridge = Combat() #Combat Object 
hitter = Health() #Health Object 

bridge.attack(hitter) #hitter.player_health is now 9. 
+0

спасибо, что это очень помогло, я не был уверен, смогу ли я это сделать. Поскольку я новичок в python, но это помогло много – Alex

+0

Я рад, что смогу помочь. Вы можете проверить эту [ссылку] (http://www.tutorialspoint.com/python/python_classes_objects.htm), чтобы узнать больше об объектно-ориентированном программировании на Python! –

0

Это одно воплощение.

class Health: 
    def __init__(self): 
     self.player_health = 10 
     self.enemy_health = 10 


class Combat: 
    def attack(self, health_obj): 
     health_obj += -1 
     return health_obj 

bridge = Combat() 
players = Health() 

print(bridge.attack(players.player_health)) 
+0

спасибо, что это было очень полезно! – Alex

Смежные вопросы