UnboundLocalError: не удается получить доступ к локальной переменной 'batLeft', если она не связана со значением
Купил ребенку книгу курсы для детей Pyton, при написании игры теннис возникла ошибка , что переменная 'batLeft' не привязана к значению, вот не знаю где мы ошиблись)) Помогите пожалуйста кто может) Вот программа:
import tkinter
import time
canvasWidth=750
canvasHeight=500
window=tkinter.Tk()
canvas=tkinter.Canvas(window,width=canvasWidth,height=canvasHeight,bg="dodgerblue4")
canvas.pack()
bat=canvas.create_rectangle(0,0,40,10,fill="dark turquoise")
ball=canvas.create_oval(0,0,10,10,fill="deep pink")
windowOpen=True
def main_loop():
while windowOpen==True:
move_bat()
move_ball()
window.update()
time.sleep(0.02)
if windowOpen==True:
check_game_over()
leftPressed=0
rightPressed=0
def on_key_press(event):
global leftPressed,rightPressed
if event.keysym=="Left":
leftPressed=1
elif event.keysym=="Right":
rightPressed=1
def on_key_release(event):
global leftPressed,rightPressed
if event.keysym=="Left":
leftPressed=0
elif event.keysym=="Right":
rightPressed=0
batSpeed=6
def move_bat():
batMove=batSpeed*rightPressed-batSpeed*leftPressed
(batLeft,batTop,batRight,batBottom)=canvas.coords(bat)
if(batLeft>0 or batMove>0)and(batRight<canvasWidth or batMove<0):
canvas.move(bat,batMove,0)
ballMoveX=4
ballMoveY=-4
setBatTop=canvasHeight-40
setBatBottom=canvasHeight-30
def move_ball():
global ballMoveX,ballMoveY
(ballLeft,ballTop,ballRight,ballBottom)=canvas.coords(ball)
if ballMoveX>0 and ballRight>canvasWidth:
ballMoveX= -ballMoveX
if ballMoveX<0 and ballLeft<0:
ballMoveX= -ballMoveX
if ballMoveY<0 and ballTop<0:
ballMoveY= -ballMoveY
if ballMoveY>0 and ballBottom>setBatTop and ballBottom<setBatBottom:
(batLeft,batTop,batRight,batBottom)=canvas.coords(bat)
if ballRight>batLeft and ballLeft<batRight:
ballMoveY= -ballMoveY
canvas.move(ball,ballMoveX,ballMoveY)
def check_game_over():
(ballLeft,ballTop,ballRight,ballBottom)=canvas.coords(ball)
if ballTop>canvasHeight:
playAgain=tkinter.messagebox.askyesno(message="Do you want to play again?")
if playAgain==True:
reset()
else:
close()
def close():
global windowOpen
windowOpen=False
window.destroy()
def reset():
global leftPressed,rightPressed
global ballMoveX,ballMoveY
leftPressed=0
rightPressed=0
ballMoveX=4
ballMoveY=-4
canvas.coords(bat,10,setBatTop,50,setBatBottom)
canvas.coords(ball,20,setBatTop-10,30,setBatTop)
window.protocol("WM_DELETE_WINDOW",close)
window.bind("<KeyPress>", on_key_press)
window.bind("<KeyRelease>", on_key_release)
reset()
main_loop()
Вот такие ошибки :
Traceback (most recent call last):
File "D:\python\Lib\idlelib\18.py", line 82, in <module>
main_loop()
File "D:\python\Lib\idlelib\18.py", line 14, in main_loop
move_ball()
File "D:\python\Lib\idlelib\18.py", line 54, in move_ball
if ballRight>batLeft and ballLeft<batRight:
UnboundLocalError: cannot access local variable 'batLeft' where it is not associated with a value
Вроде все проверяли несколько раз , но так и не увидели ошибку((