Как получить доступ и впоследствии изменить переменную вне цикла - PullRequest
0 голосов
/ 08 февраля 2019

Я работаю над системой столкновений для игры, которую я сейчас разрабатываю для развлечения.Статистика и аптечки являются просто заполнителями для построения системы перед завершением игры, которая отлично работает, кроме этой проблемы.Я хочу, чтобы переменная medkits была доступна внутри цикла, а затем, скажем, было ли повторное обращение, чтобы эта переменная была заменена на правильное число.Например, если я использую аптечку в первом столкновении, у меня должно быть на одно меньше в следующем.понятия не имею, как это сделать, так как это моя первая настоящая попытка сделать законную игру.Любое функциональное решение было бы замечательно!

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

charisma = int(60)
strength = int(25)
endurance = int(40)
intelligence = int(70)
capacity = int(50)
from random import randint
medkits = 2

def encounter(enemy):
  print("Engaging "+enemy+"!")
  print()
  y = 10 + (strength*.10)
  enhealth = int(100)
  enhealth = int(enhealth-y)
  health = int(100)
  med = int(medkits)
  while True:
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if "1" in enc:
      x = randint(0, 100)
      if x < 80:
        enhealth = int(enhealth-y)
        print()
        print("You hit "+enemy+" for "+str(y)+" damage!")
        print()
      else:
        print()
        print("Miss!")
        print()
    elif "2" in enc:
      if med > 0:
        print()
        print("You used a medkit!")
        print()
        health = health+30
        med = med-1
        print("Health is at "+str(health))
        print()
      else:
        print("You're out of medkits!")
    if enhealth <= int(0):
      print(enemy+" has been defeated! Well done!")
      break

encounter("Cornelius")

Ответы [ 2 ]

0 голосов
/ 08 февраля 2019

Одним из способов решения этой проблемы является определение всех ваших начальных значений вне функции (что вы уже делаете), затем передача их в качестве дополнительных переменных функции и создание функции рекурсивной.Используйте оператор return в конце каждого прогона.Если враг все еще жив, и вы хотите снова запустить функцию, команда return encounter(enemy, y, enhealth, health, med) просто вызывает функцию снова, передавая значения, которые она обновляла ранее.Когда враг мертв, простой return выходит из функции все вместе.

from random import randint

def encounter(enemy, y, enhealth, health, med):
    print("Engaging "+enemy+"!\n")
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if enc == '1':
        if randint(0,100) < 80:
            enhealth = int(enhealth - y)
            print("\nYou hit "+enemy+" for "+str(y)+" damage!\n")
        else:
            print("\nMiss!\n")
    elif enc == '2':
        if med > 0:
            print("\nYou used a medkit!\n")
            health += 30
            med -= 1
            print("\nHealth is at " + str(health) + "\n")
        else:
            print("\nYou're out of medkits!\n")
    if enhealth <= 0:
        print(enemy + " has been defeated! Well done!")
        return
    return encounter(enemy, y, enhealth, health, med)


strength = int(25)
y = 10 + (strength*.10)
enhealth = int(100 - y)
health = int(100)
med = 2
enemy = "Cornelius"
encounter(enemy, y, enhealth, health, med)

Однако вместо того, чтобы пытаться отслеживать все эти переменные, вы можете рассмотреть возможность сохранения всей статистики внутри словаря Python для передачи и выхода из функций.Таким образом, вы также можете return словарь, если вы закончили с encounter(), но хотели сохранить те же итоговые характеристики для передачи в новую функцию.

0 голосов
/ 08 февраля 2019

Ваша переменная med устанавливается в аптечку каждый раз, когда вы вызываете функцию столкновения.Например, если вы вызываете встречу («Корнелиус») и используете 1 аптечку, а затем вызываете встречу («Корнелиус»), для med снова устанавливается значение int (аптечки).В настоящее время для каждого вызова функции установлено значение 2.Я исправил ваш код, так что теперь он достигает желаемой функциональности.Классная игра и продолжайте кодировать!

charisma = int(60)
strength = int(25)
endurance = int(40)
intelligence = int(70)
capacity = int(50)
from random import randint
med = 2

def encounter(enemy):
  print("Engaging "+enemy+"!")
  print()
  y = 10 + (strength*.10)
  enhealth = int(100)
  enhealth = int(enhealth-y)
  health = int(100)
  global med
  while True:
    print("Pick your move!")
    print("1. Smack with shovel")
    print("2. Use a medkit (you have "+str(med)+" medkits)")
    print("3. Attempt escape")
    enc = input("I will try to (put a #): ")
    if "1" in enc:
      x = randint(0, 100)
      if x < 80:
        enhealth = int(enhealth-y)
        print()
        print("You hit "+enemy+" for "+str(y)+" damage!")
        print()
      else:
        print()
        print("Miss!")
        print()
    elif "2" in enc:
      if med > 0:
        print()
        print("You used a medkit!")
        print()
        health = health+30
        med = med-1
        print("Health is at "+str(health))
        print()
      else:
        print("You're out of medkits!")
    if enhealth <= int(0):
      print(enemy+" has been defeated! Well done!")
      break

encounter("Cornelius")
encounter("Cornelius")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...