全局变量

时间:2016-06-05 01:52:14

标签: python python-3.x pygame

当我开始游戏并打开菜单时,我不断收到错误消息。 “语法警告:名称'完成'在全局声明之前被分配”。我不打扰游戏,但它只是烦人,有关如何解决它的任何想法?

def load_level(level):
    walls = []
    players = []
    finishes = []
    x = y = 0
    for row in levels[level]:
        for col in row:
            if col == "W":
                walls.append(Wall((x, y)))
            if col == "P":
                players.append(Player((x, y)))
            if col == "F":
                finishes.append(Finish1((x, y)))
            if col == "G":
                finishes.append(Finish2((x, y)))
            if col == "H":
                finishes.append(Finish3((x, y)))
            if col == "I":
                finishes.append(Finish4((x, y)))
            x += 40.96
        y += 30.72 
        x = 0
    return walls, players, finishes

walls, players, finishes = load_level(currentLevel)


def Menu():
    runnin = True
    while runnin:
        clock.tick(60)
        screen.fill(BLACK)
        mouseclick = pygame.mouse.get_pressed()
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit(0)
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_ESCAPE:
                    pygame.quit()
                    sys.exit(0)
        for option in options:
            if option.rect.collidepoint(pygame.mouse.get_pos()):
                option.hovered = True
                if mouseclick[0] == 1:
                    if option.text == "Easy":
                        walls, players, finishes = load_level(0)
                        global currentlevel, walls, players, finishes
                        currentlevel = 0
                        main()
                    elif option.text == "Medium":
                        walls, players, finishes = load_level(1)
                        global currentlevel, walls, players, finishes
                        currentlevel = 1
                        main()
                    elif option.text == "Hard":
                        walls, players, finishes = load_level(2)
                        global currentlevel, walls, players, finishes
                        currentlevel = 2
                        main()
                    else:
                        runnin = False
            else:
                option.hovered = False
            option.draw()
        pygame.display.update()
    pygame.quit()
    sys.exit(0)

1 个答案:

答案 0 :(得分:1)

在将变量值调用为全局之前为变量赋值时会发生这种情况,解决此问题的方法是将行global currentlevel, walls, players, finishes移动到第二个函数的开头而不是if声明。代码仍然会运行相同,但会删除错误。