Проблема с глобальными переменными в Pygame - PullRequest
2 голосов
/ 08 октября 2019

Я пытаюсь создать систему опыта для своего летнего игрового проекта, но по какой-то причине она, похоже, не относится к функции системы опыта. Вот что я сделал:

global currentxp
currentxp = 0
global level
level = 1
def exp_system():
    import random
    mobxp = random.randrange(1, 20, 1)
    currentxp = currentxp
    currentxp = currentxp + mobxp
    level = currentxp
    if currentxp >= 100:
        print("You Leveled Up!")
        level_up = True
    if currentxp < 100:
        level_up = False
        print("You need more xp to level up!")
    if level_up:
        currentxp = 0
        print("Your Current XP is now:")
        print(currentxp)
        level = level + 1
        print("You current level is now:")
        print(level)
        improvestst = input("Choose a stat to improve:(Health or Attack Power)")
    else:
        print("Your Current XP is now:")
        print(currentxp)
        print("You current level is now:")
        print(level)

Для тестирования системы я использовал следующее:

mobhealth = 0
if mobhealth >= 0:
    victory = True
if victory:
    exp_system()
    victory = False

Однако я получаю UnboundLocalError: локальная переменная 'currentxp', на которую ссылается перед присваиванием currentxp =currentxp на консоли Python. Я надеюсь, что кто-то может сказать мне, что я сделал неправильно, и привести пример, используя мои переменные. Спасибо!

Ответы [ 2 ]

4 голосов
/ 08 октября 2019

Я бы покончил с глобальными переменными и просто передавал и возвращал переменные.

import random

currentxp = 0
level = 1


def exp_system(currentxp, level):

    mobxp = random.randrange(1, 20, 1)
    currentxp = currentxp + mobxp

    if currentxp >= 100:
        print("You Leveled Up!")
        level_up = True
    if currentxp < 100:
        level_up = False
        print("You need more xp to level up!")
    if level_up:
        currentxp = 0
        print("Your Current XP is now:")
        print(currentxp)
        level = level + 1
        print("You current level is now:")
        print(level)
        improvestst = input(
            "Choose a stat to improve:(Health or Attack Power)")
    else:
        print("Your Current XP is now:")
        print(currentxp)
        print("You current level is now:")
        print(level)

    return currentxp, level


mobhealth = 0
if mobhealth >= 0:
    victory = True
if victory:
    currentxp, level = exp_system(currentxp, level)
    victory = False

Вывод:

Вам нужно больше опыта, чтобы повысить уровень! Ваша текущая XP теперь: 17 Вы

текущий уровень сейчас: 1

Ваши условия слишком сложны. Проще говоря, это отличное правило для программистов.

if currentxp >= 100:
    print("You Leveled Up!")
    currentxp = 0
    level = level + 1
    improvestst = input("Choose a stat to improve:(Health or Attack Power)")
else:
    print("You need more xp to level up!")
print("Your Current XP is now:")
print(currentxp)
print("You current level is now:")
print(level)

Приведенный выше код выполняет те же функции (в несколько ином порядке) с меньшим количеством кода.

2 голосов
/ 08 октября 2019

Вы неправильно используете ключевое слово global, как показано в этом разделе FAQ по программированию Python , global необходимо использовать внутри вашей функции, иначе ваша переменная будет считатьсялокальный.

Быстрый пример (но он не должен помешать вам проверить ссылку):

currentxp = 0
level = 12

def exp_system():
    global currentxp
    currentxp = 5 # works
    currentxp = level #works
    print(level) #works

    # level = 13 # won't work

exp_system()

Кроме того, было бы хорошей практикой ставить весь ваш импорт на первое место. из ваших файлов.

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