Q:

How to fix UnboundLocalError in pygame

I am trying to make a game in python using pygame. My code seems right but i get the following error.   
> Traceback (most recent call last):  
  File "C:\Users\500198\Desktop\Dodge It.py", line 195, in <module>  
     gameLoop()  
  File "C:\Users\500198\Desktop\Dodge It.py", line 190, in gameLoop  
    runGame()  
  File "C:\Users\500198\Desktop\Dodge It.py", line 182, in runGame     
    x += x_change  
UnboundLocalError: local variable 'x' referenced before assignment 

What I am trying to do is move the  image.But for some reason the variable 'x' wont change and gives me the above error.  
Loading Image
carimg=pygame.image.load('food.png')  
x=(display_width*0.45)    
y=(display_height*0.48)  
x_change =0  

Car Image
Here is my function for drawing the car on screen:  
def car(x,y):
    gameDisplay.blit(carimg,(x,y))

This is my game run up
 def runGame():
        gameExit = False
        gameOver = False
        while not gameExit:
            while gameOver == True:
                #Game Over message

                gameDisplay.fill(white)
                message_to_screen("Game over",
                                  red,
                                  y_displace=-50,
                                  size="large")
                message_to_screen("Press C to play again or Q to quit.",
                                  white,
                                  y_displace=50,
                                  size="medium")
                pygame.display.update()

                for event in pygame.event.get():
                    if event.type == pygame.KEYDOWN:
                        if event.key == pygame.K_q:
                            gameExit = True
                            gameOver = False
                        if event.key == pygame.K_c:
                            gameLoop()
            #Game Controls
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    gameExit = True
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_LEFT:
                        x_change = -5  #Change is x co ordinate by -5
                    elif event.key == pygame.K_RIGHT:
                        x_change = 5 #Change is x co ordinate by +5

                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                        x_change=0 #Player should not move up or down

            x += x_change #X change since i need to move the image
            gameDisplay.fill(white)
            car(x,y)
            pygame.display.update()
            clock.tick(FPS)

My game Loop
def gameLoop():
    runGame()
    pygame.quit()
    quit()

Loop call
gameLoop()

A:

You need to define x and y as global at the start, and in any function that uses them.
global x, y, x_change
carimg=pygame.image.load('food.png')  
x=(display_width*0.45)    
y=(display_height*0.48)  
x_change =0 

And in the rungame loop. As they are passed in to the car drawing function it should be okay there.
global x,y, x_change

