Python 分配错误前引用
我有下面的代码来创建一个pygame of snake(非常基本),为了增加我的snakes长度,我在第142行添加了一个语句,说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
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
将全局蛇形长度
放入引用的函数中