Game crashing when player2 collides with money. Error message: unboundLocalError: local variable 'score2' referenced before assignment
Game crashing when player2 collides with money. Error message: unboundLocalError: local variable 'score2' referenced before assignment
import random
WIDTH = 800
HEIGHT = 500
background = Actor("background")
player = Actor("player")
enemy = Actor("enemy")
money = Actor("money", pos=(300,300))
player2 = Actor("alien")
score = 0
score2 = 0
player.x = 200
player.y = 200
player2.x= 400
player2.y= 400
def draw():
screen.clear()
background.draw()
player.draw()
enemy.draw()
money.draw()
player2.draw()
def update():
global score
if keyboard.right:
player.x = player.x + 4
if keyboard.left:
player.x = player.x - 4
if keyboard.down:
player.y = player.y + 4
if keyboard.up:
player.y = player.y - 4
if player.x > WIDTH:
player.x = WIDTH
if player.x < 0:
player.x = 0
if player.y < 0:
player.y = 0
if player.y > HEIGHT:
player.y = HEIGHT
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
dx1, dy1 = player.x - enemy.x, player.y - enemy.y
dx2, dy2 = player2.x - enemy.x, player2.y - enemy.y
dist1sq = dx1*dx1 + dy1*dy1
dist2sq = dx2*dx2 + dy2*dy2
player_near = player if dist1sq < dist2sq else player2
if enemy.x < player_near.x:
enemy.x += 1
if enemy.x > player_near.x:
enemy.x -= 1
if enemy.y < player_near.y:
enemy.y += 1
if enemy.y > player_near.y:
enemy.y -= 1
if player.colliderect(enemy):
exit()
if player2.colliderect(enemy):
exit()
if money.colliderect(player):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score = score + 1
if money.colliderect(player2):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score2 += 1
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
这是一款用 mu editor 制作的 python 游戏。每当 player2 与钱发生碰撞时,player2 应该收集它并获得分数。每当 player2 与金钱发生碰撞时,它就会使游戏崩溃,并给我一个错误消息:UnboundLocalError: local variable 'score2' referenced before assignment.
您错过了申报 gloabl score2
:
def update():
global score, score2 # <----
# [...]
if money.colliderect(player2):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score2 += 1
注意,如果您不将 score2
声明为 global
变量,则 scope2
将被假定为 update
范围内的变量,因为变量设置在 score2 += 1
中。但是,语句 score2 += 1
会导致异常,因为它试图在变量定义之前读取它。
import random
WIDTH = 800
HEIGHT = 500
background = Actor("background")
player = Actor("player")
enemy = Actor("enemy")
money = Actor("money", pos=(300,300))
player2 = Actor("alien")
score = 0
score2 = 0
player.x = 200
player.y = 200
player2.x= 400
player2.y= 400
def draw():
screen.clear()
background.draw()
player.draw()
enemy.draw()
money.draw()
player2.draw()
def update():
global score
if keyboard.right:
player.x = player.x + 4
if keyboard.left:
player.x = player.x - 4
if keyboard.down:
player.y = player.y + 4
if keyboard.up:
player.y = player.y - 4
if player.x > WIDTH:
player.x = WIDTH
if player.x < 0:
player.x = 0
if player.y < 0:
player.y = 0
if player.y > HEIGHT:
player.y = HEIGHT
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
dx1, dy1 = player.x - enemy.x, player.y - enemy.y
dx2, dy2 = player2.x - enemy.x, player2.y - enemy.y
dist1sq = dx1*dx1 + dy1*dy1
dist2sq = dx2*dx2 + dy2*dy2
player_near = player if dist1sq < dist2sq else player2
if enemy.x < player_near.x:
enemy.x += 1
if enemy.x > player_near.x:
enemy.x -= 1
if enemy.y < player_near.y:
enemy.y += 1
if enemy.y > player_near.y:
enemy.y -= 1
if player.colliderect(enemy):
exit()
if player2.colliderect(enemy):
exit()
if money.colliderect(player):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score = score + 1
if money.colliderect(player2):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score2 += 1
if keyboard.d:
player2.x = player2.x + 4
if keyboard.a:
player2.x = player2.x - 4
if keyboard.s:
player2.y = player2.y + 4
if keyboard.w:
player2.y = player2.y - 4
if player.colliderect(player2):
exit()
if player2.x > WIDTH:
player2.x = WIDTH
if player2.x < 0:
player2.x = 0
if player2.y < 0:
player2.y = 0
if player2.y > HEIGHT:
player2.y = HEIGHT
这是一款用 mu editor 制作的 python 游戏。每当 player2 与钱发生碰撞时,player2 应该收集它并获得分数。每当 player2 与金钱发生碰撞时,它就会使游戏崩溃,并给我一个错误消息:UnboundLocalError: local variable 'score2' referenced before assignment.
您错过了申报 gloabl score2
:
def update():
global score, score2 # <----
# [...]
if money.colliderect(player2):
money.x = random.randint(0, WIDTH)
money.y = random.randint(0, HEIGHT)
score2 += 1
注意,如果您不将 score2
声明为 global
变量,则 scope2
将被假定为 update
范围内的变量,因为变量设置在 score2 += 1
中。但是,语句 score2 += 1
会导致异常,因为它试图在变量定义之前读取它。