Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 分配错误前引用_Python_Pygame - Fatal编程技术网

Python 分配错误前引用

Python 分配错误前引用,python,pygame,Python,Pygame,我有下面的代码来创建一个pygame of snake(非常基本),为了增加我的snakes长度,我在第142行添加了一个语句,说snakeLength+=1 Traceback (most recent call last): File "C:/Python27/sjewgou.py", line 142, in <module> gameLoop() File "C:/Python27/sjewgou.py", line 118, in ga

我有下面的代码来创建一个pygame of snake(非常基本),为了增加我的snakes长度,我在第142行添加了一个语句,说
snakeLength+=1

Traceback (most recent call last):
      File "C:/Python27/sjewgou.py", line 142, in <module>
       gameLoop()
      File "C:/Python27/sjewgou.py", line 118, in gameLoop
       if len(snakeList) > snakeLength:
     UnboundLocalError: local variable 'snakeLength' referenced before assignment
回溯(最近一次呼叫最后一次):
文件“C:/Python27/sjewgou.py”,第142行,在
gameLoop()
gameLoop中第118行的文件“C:/Python27/sjewgou.py”
如果len(蛇师)>蛇长:
UnboundLocalError:赋值前引用的局部变量“snakeLength”
我该怎么办

我的代码如下

import pygame
pygame.init()
import time
import random

white = (255,255,255)
black = (0,0,0)
red = (255,0,0)
green = (0,155,0)

display_width = 800
display_height = 600

block_size = 10
FPS = 30

gameDisplay = pygame.display.set_mode((display_width,display_height))
pygame.display.set_caption("Ssssrikar")

gameExit = False
lead_x = display_width/2
lead_y = display_height/2

lead_x_change = 0
lead_y_change = 0

snakeList = []
snakeLength = 1


font = pygame.font.SysFont(None,25)

clock = pygame.time.Clock()

font = pygame.font.SysFont(None,25)

def snake(block_size,snakelist):
    for elements in snakelist:
        pygame.draw.rect(gameDisplay, green, [elements[0], elements[1],block_size,block_size])



def message_to_screen(msg,color):
    screen_text = font.render(msg, True, color)
    gameDisplay.blit(screen_text, [display_width/2, display_height/2])



def gameLoop():
    gameExit = False
    gameOver = False

    lead_x = display_width/2
    lead_y = display_height/2
    lead_x_change = 0
    lead_y_change = 0        


    randAppleX = round(random.randrange(0,display_width-block_size)/10.0)*10.0
    randAppleY = round(random.randrange(0,display_height-block_size)/10.0)*10.0



    while not gameExit:

        while gameOver == True:
            gameDisplay.fill(white)
            message_to_screen("Gamer over, press C to play again or Q to quit",red)
            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()

        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                gameExit = True
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    lead_x_change = -block_size
                    lead_y_change = 0
                elif event.key == pygame.K_RIGHT:
                    lead_x_change = block_size
                    lead_y_change = 0
                elif event.key == pygame.K_UP:
                    lead_y_change = -block_size
                    lead_x_change = 0
                elif event.key == pygame.K_DOWN:
                    lead_y_change = block_size
                    lead_x_change = 0

        if lead_x >= display_width:
            gameOver = True
        elif lead_x < 0:
            gameOver = True
        elif lead_y >= display_height:
            gameOver = True
        elif lead_y < 0:
            gameOver = True

        lead_x += lead_x_change

        lead_y += lead_y_change
        gameDisplay.fill(white)
        pygame.draw.rect(gameDisplay, red, [randAppleX,randAppleY,block_size,block_size])



        snakeHead = []
        snakeHead.append(lead_x)
        snakeHead.append(lead_y)
        snakeList.append(snakeHead)

        if len(snakeList) > snakeLength:
            del snakeList[0]

        snake(block_size, snakeList)



        pygame.display.update()

        if lead_x == randAppleX and lead_y == randAppleY:
            randAppleX = round(random.randrange(0,display_width-block_size)/10.0)*10
            randAppleY = round(random.randrange(0,display_height-block_size)/10.0)*10
            snakeLength += 1


        clock.tick(FPS)





    pygame.quit()
    quit()

gameLoop()
导入pygame
pygame.init()
导入时间
随机输入
白色=(255255)
黑色=(0,0,0)
红色=(255,0,0)
绿色=(0155,0)
显示宽度=800
显示高度=600
块大小=10
FPS=30
gameDisplay=pygame.display.set_模式((显示宽度、显示高度))
pygame.display.set_标题(“Ssssrikar”)
gameExit=False
引线x=显示宽度/2
引线y=显示高度/2
lead_x_change=0
潜在客户变更=0
蛇学家=[]
蛇形长度=1
font=pygame.font.SysFont(无,25)
clock=pygame.time.clock()
font=pygame.font.SysFont(无,25)
def蛇(块大小,蛇列表):
对于snakelist中的元素:
pygame.draw.rect(游戏显示,绿色,[元素[0],元素[1],块大小,块大小])
def消息到屏幕(消息,颜色):
screen\u text=font.render(msg、True、color)
blit(屏幕文本,[显示宽度/2,显示高度/2])
def gameLoop():
gameExit=False
gameOver=False
引线x=显示宽度/2
引线y=显示高度/2
lead_x_change=0
潜在客户变更=0
randAppleX=圆形(随机.randrange(0,显示宽度块大小)/10.0)*10.0
randAppleY=圆形(随机.randrange(0,显示高度块大小)/10.0)*10.0
不退出游戏时:
当gameOver==True时:
游戏显示。填充(白色)
屏幕上显示消息(“玩家结束,按C键重新玩或按Q键退出”,红色)
pygame.display.update()
对于pygame.event.get()中的事件:
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_q:
gameExit=True
gameOver=False
如果event.key==pygame.K_c:
gameLoop()
对于pygame.event.get()中的事件:
如果event.type==pygame.QUIT:
gameExit=True
如果event.type==pygame.KEYDOWN:
如果event.key==pygame.K_左:
lead_x_change=-块大小
潜在客户变更=0
elif event.key==pygame.K_RIGHT:
lead_x_change=块大小
潜在客户变更=0
elif event.key==pygame.K_UP:
lead_y_change=-块大小
lead_x_change=0
elif event.key==pygame.K_向下:
lead\u y\u change=块大小
lead_x_change=0
如果铅x>=显示宽度:
gameOver=True
elif铅x<0:
gameOver=True
elif导线y>=显示高度:
gameOver=True
elif lead_y<0:
gameOver=True
lead_x+=lead_x_更换
lead_y+=lead_y_更换
游戏显示。填充(白色)
pygame.draw.rect(游戏显示,红色,[randAppleX,randAppleY,块大小,块大小])
蛇头=[]
蛇头。附加(铅x)
蛇头。附加(铅)
蛇学家。附加(蛇头)
如果len(蛇师)>蛇长:
德尔斯内克利斯特[0]
蛇(块大小,蛇学家)
pygame.display.update()
如果lead_x==randAppleX和lead_y==randAppleY:
randAppleX=圆形(随机.randrange(0,显示宽度块大小)/10.0)*10
randAppleY=圆形(随机.randrange(0,显示高度块大小)/10.0)*10
蛇形长度+=1
时钟滴答声(FPS)
pygame.quit()
退出
gameLoop()

UnboundLocalError,表示您的变量未在函数范围内定义

在游戏中循环添加

global snakeLength
例如:

>>> x = 10
>>> def foo():
...     x += 1        #here x is local to foo
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
 UnboundLocalError: local variable 'x' referenced before assignment

>>> def foo():
...     global x    # now x is global variable
...     x += 1
... 
>>> foo()
>>> x
11
>x=10
>>>def foo():
...     x+=1#这里x是foo的本地值
... 
>>>foo()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第2行,在foo中
UnboundLocalError:赋值前引用了局部变量“x”
>>>def foo():
...     全局x#现在x是全局变量
...     x+=1
... 
>>>foo()
>>>x
11

UnboundLocalError,表示您的变量未在函数范围内定义

在游戏中循环添加

global snakeLength
例如:

>>> x = 10
>>> def foo():
...     x += 1        #here x is local to foo
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
 UnboundLocalError: local variable 'x' referenced before assignment

>>> def foo():
...     global x    # now x is global variable
...     x += 1
... 
>>> foo()
>>> x
11
>x=10
>>>def foo():
...     x+=1#这里x是foo的本地值
... 
>>>foo()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第2行,在foo中
UnboundLocalError:赋值前引用了局部变量“x”
>>>def foo():
...     全局x#现在x是全局变量
...     x+=1
... 
>>>foo()
>>>x
11

UnboundLocalError,表示您的变量未在函数范围内定义

在游戏中循环添加

global snakeLength
例如:

>>> x = 10
>>> def foo():
...     x += 1        #here x is local to foo
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
 UnboundLocalError: local variable 'x' referenced before assignment

>>> def foo():
...     global x    # now x is global variable
...     x += 1
... 
>>> foo()
>>> x
11
>x=10
>>>def foo():
...     x+=1#这里x是foo的本地值
... 
>>>foo()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第2行,在foo中
UnboundLocalError:赋值前引用了局部变量“x”
>>>def foo():
...     全局x#现在x是全局变量
...     x+=1
... 
>>>foo()
>>>x
11

UnboundLocalError,表示您的变量未在函数范围内定义

在游戏中循环添加

global snakeLength
例如:

>>> x = 10
>>> def foo():
...     x += 1        #here x is local to foo
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
 UnboundLocalError: local variable 'x' referenced before assignment

>>> def foo():
...     global x    # now x is global variable
...     x += 1
... 
>>> foo()
>>> x
11
>x=10
>>>def foo():
...     x+=1#这里x是foo的本地值
... 
>>>foo()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“”,第2行,在foo中
UnboundLocalError:赋值前引用了局部变量“x”
>>>def foo():
...     全局x#现在x是全局变量
...     x+=1
... 
>>>foo()
>>>x
11

全局蛇形长度
放入引用的函数中