2017-01-31 2 views
0

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

def combat(): 
    global playerhealthpoints 
    playerhealthpoints = 100 
    def cavecombat(): 
     combatroundinput = raw_input("The round has begun. Do you Block, Dodge, or Run?").lower() 
     if combatroundinput == "block": 
      enemyattackroll = random.randrange(1,10) 
      if enemyattackroll < 5: 
       print "Enemy has missed their attack this round." 
       cavecombat() 
      elif enemyattackroll >= 5: 
       enemydamageroll = random.randrange(1,10)/2 
       playerhealthpoints = playerhealthpoints - enemydamageroll 
       print "You have taken %s damage." %enemydamageroll 
       print "You have %s health remaining." %playerhealthpoints 
       cavecombat() 
     elif combatroundinput == "dodge": 
      enemyattackroll = random.randrange(1,10)/2 
      if enemyattackroll < 5: 
       print "Enemy has missed their attack this round." 
       cavecombat() 
      elif enemyattackroll >= 5: 
       enemydamageroll = random.randrange(1,10) 
       playerhealthpoints = playerhealthpoints - enemydamageroll 
       print "You have taken %s damage." %enemydamageroll 
       print "You have %s health remaining." %playerhealthpoints 
       cavecombat() 
     elif combatroundinput == "run": 
      playerrunroll = random.randrange(1,10) 
      enemyattackroll = random.randrange(1,10) * 2 
      if enemyattackroll < 5 and playerrunroll <5: 
       print "Enemy has missed their attack this round." 
       print "You have failed to run from this encounter." 
       cavecombat() 
      elif enemyattackroll >= 5 and playerrunroll >= 5: 
       enemydamageroll = random.randrange(1,10) 
       playerhealthpoints = playerhealthpoints - enemydamageroll 
       print "You have taken %s damage." %enemydamageroll 
       print "You have %s health remaining." %playerhealthpoints 
       print "You have succeeded in escaping the enemy." 

      elif enemyattackroll < 5 and playerrunroll >= 5: 
       print "Enemy has missed their attack this round." 
       print "You have succeeded in escaping the enemy." 

      elif enemyattackroll >= 5 and playerrunroll < 5: 
       enemydamageroll = random.randrange(1,10) 
       playerhealthpoints = playerhealthpoints - enemydamageroll 
       print "You have taken %s damage." %enemydamageroll 
       print "You have %s health remaining." %playerhealthpoints 
       print "You have failed to run from this encounter." 
       cavecombat() 
     else: 
      print "Learn to type, you suck." 
      cavecombat() 
    cavecombat() 
combat() 

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

+1

Это много кода для нас, чтобы выяснить! Попробуйте кипячение проблемы только несколько строки и сообщения, которые ... и точно, что пошло не так. – tdelaney

+0

Объявите переменную за пределами функции. Затем ссылайтесь на нее изнутри функции с помощью global. Тем не менее, я не рекомендую использовать глобальные переменные. – RobertB

ответ

0

Необходимо, чтобы return здоровья. Я новичок в python, поэтому лучше проверить его. Функция IMO внутри функции странная. Попробуйте сделать функцию отдельной и использовать return, чтобы сохранить значение.

Просто для иллюстрации того, что я имел в виду.

Ниже будет returnpl значение:

def cavecombat(): 
    combatroundinput = input("The round has begun. Do you Block, Dodge, or Run?").lower() 
    if combatroundinput == "block": 
     enemyattackroll = random.randint(1, 10) 
     if enemyattackroll < 5: 
      print("Enemy has missed their attack this round.") 
      pl = 0 
      return pl 
     elif enemyattackroll >= 5: 
      enemydamageroll = random.randint(1, 10)/2 
      pl = enemydamageroll 
      print("You have taken %s damage." % enemydamageroll) 
      return pl 

Ниже можно сделать сейчас:

повреждения = cavecombat()

Он выполнит функцию, а затем поместите значение pl на повреждение.

Так что, если печать сверху сказала: «Вы взяли 3 повреждение. Значения ущерба будет 3.

+0

Да, это лучше, чем используя глобальные переменные. Верните значение 'battle', а затем используйте' playerhealthpoints = combat() ', чтобы получить значение вне функции. – RobertB

+0

Можете ли вы показать мне, как вы это сделаете? –

+0

@JohnPfeifer Я бы, вероятно, закончил в результате чего DVICE. Добавив немного кода выше, чтобы проиллюстрировать, что я имел в виду. – Sid

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