2013-05-09 3 views
1

Im curently обучения Python (2.7), используя отличные учебники из http://www.learnpythonthehardway.org/Python - передать переменную в функцию

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

Ниже код предназначен для установки на здоровье игроков до 100 в начале каждой игры, он делает это, выполняя другую функцию «player_health» в классе под названием «Set_Health»

class Health(): 

    def store_health(self): 

     d = Set_Health() 
     d.player_health() 
     local_health = d.player_health() 

     print "Your health is at", local_health, "%" 
     return local_health 

Когда ниже Выполняется функция «punch_received», здоровье игроков уменьшается на 10

class Combat(): 

    def punch_received(self): 

     punch = 10 

     x = Health() 
     x.store_health() 
     combat_health = x.store_health() 

     combat_health = combat_health - punch 
     print "You have been punched, your health is", combat_health, "%" 

Пока все хорошо. Это может быть не идеальная или лучшая методология, но она работает как основа для изучения.

Моя проблема в том, что я не знаю, как вернуть/отправить значение «combat_health» другой переменной, например. «current_hero_health», который находится в другой функции.

class Hero_Health(): 

    def current_hero_health(self): 

     # I want to store a running total of the heros health in here 

Любая помощь с этим очень ценится. Спасибо Deepend

+5

Несмотря на то, что вы написали, что знаете, что это «не может быть совершенным или лучшей методологией», я бы предложил разработать классы более естественно. Таким образом, ваш герой должен быть экземпляром класса «Герой» с помощью метода «Punch» ... и свойств типа «Здоровье» и т. Д., И каждый «Бой» должен быть экземпляром «Combat». Это поможет вам, естественно, найти лучший способ для разработки ваших переменных потоков. Вы, очевидно, не заметили использование объектно-ориентированного программирования, так как вы пытаетесь имитировать функциональное программирование ;-) – tamasgal

+2

Спасибо septi, я закончил перестройку проекта, как вы предложили, так как каждое изменение я только что создал новые ошибки – Deepend

ответ

0

Вы делаете current_hero_health атрибут вашего Hero_Health.

class Hero_Health(): 

    def __init__(self, current_h): 
     self.current_hero_health = current_h 

    def current_hero_health(self): 
     self.current_hero_health = 3 ; # this is stored total of hero health 

Вы можете получить доступ к члену любого метода класса, с self.current_hero_health, и это сохраняет глобальный счетчик для объекта этого класса.

Надеюсь, это поможет.

0

Вы можете просто добавить дополнительные параметры к функции. Первый аргумент функции, определенные в классе (в отличие от @staticmethod и @classmethod) является сам объект, и все параметры функции появляются после этого:

def current_hero_health(self, value): 
    self.health = value 

MyHealthObject.current_hero_health(5) 
Смежные вопросы