PYTHON中的TKINTER
好吧,我正在尝试做一个2人的乒乓球游戏,到目前为止,我遇到了3个问题。这是第三次我真的无法集中注意力(如果你想知道问题出在哪里,找到球的运动逻辑)
#Setting up the window
from tkinter import *
HEIGHT=500
WIDTH=800
window=Tk()
window.title('PONG!')
c=Canvas(window,width=WIDTH,height=HEIGHT,bg='black')
c.pack()
MID_X=WIDTH/2
MID_Y=HEIGHT/2
def pongstick():
return c.create_polygon(0,0, 10,0, 10,70, 0,70, fill='white')
def ball():
return c.create_oval(MID_X-10,MID_Y-10, MID_X+10,MID_Y+10, fill='white')
pong1=pongstick()
pong2=pongstick()
ballplay=ball()
MID_Y=MID_Y-35
c.move(pong1, 40, MID_Y)
c.move(pong2, WIDTH-40, MID_Y)
#Scores
player1p=0
player2p=0
#Movement of the paddles
stickspeed=10
def move_stick(event):
if event.keysym == 'w':
c.move(pong1, 0, -stickspeed)
elif event.keysym == 's':
c.move(pong1, 0, stickspeed)
if event.keysym == 'Up':
c.move(pong2, 0, -stickspeed)
elif event.keysym == 'Down':
c.move(pong2, 0, stickspeed)
#Ball movement logic
ballspeed=10
ballY=ballspeed
ballX=ballspeed
ballXadd=WIDTH/2
ballYadd=HEIGHT/2
def move_ball():
c.move(ballplay, ballX, ballY)
ballXadd=ballXadd+ballX
ballYadd=ballYadd+ballY
if ballXadd > WIDTH:
player2p=player2p+1
c.move(ball,MID_X-10,MID_Y-10)
ballXadd=0
ballYadd=0
elif ballXadd < WIDTH:
player1p=player1p+1
c.move(ball,MID_X-10,MID_Y-10)
ballXadd=0
ballYadd=0
elif ballYadd > HEIGHT:
if ballX == ballspeed:
ballY = -ballspeed
elif ballX == -ballspeed:
ballY = ballspeed
elif ballYadd < HEIGHT:
if ballX == ballspeed:
ballY = ballspeed
elif ballX == -ballspeed:
ballY = -ballspeed
#GAME!
c.bind_all('<Key>',move_stick)
move_ball()
问题是,每当我运行此程序时,都会收到以下错误消息:
^{pr2}$我可能遗漏了一些非常基本的东西,比如使用return命令之类的,但是让我困惑的是为什么ballX工作,而ballY不工作
将您的
def move_ball()
声明更改为def move_ball(ballX, ballY)
,并使用move_ball(ballX, ballY)
调用它问题是c.move将改变ballX和ballY的值。如果要更改全局变量,必须在函数中声明它全局。您没有这样做;因此,函数中的ballX/Y变量是局部变量。在
鉴于此,错误更容易理解:您没有定义局部变量ballX/Y。在
这只是依赖全局变量的诸多危险之一。在
为了解决这个问题,我想您只需在函数的顶部添加一行:
相关问题 更多 >
编程相关推荐