from tkinter import *import randomimport timeclass Ball:def __init__(self,canvas,paddle,color):self.canvas=canvasself.paddle=paddleself.id=canvas.create_oval(10,10,25,25,fill=color)self.canvas.move=(self.id,245,100)starts=[-3,-2,-2,1,2,3]random.shuffle(starts)self.x=starts[0]self.y=-3self.canvas_height=self.canvas.winfo_height()self.canvas_width=self.canvas.winfo_width()self.hit_bottom=Falsedef hit_paddle(self,pos):paddle_pos=self.canvas.coords(self.paddle.id)if pos[2]>=paddle_pos[0] and pos[0]<=paddle_pos[2]:if pos[3]>=paddle_pos[1] and pos[3]<=paddle_pos[3]:return Truereturn Falsedef draw(self):self.canvas.move(self.id,self.x,self.y)pos=self.canvas.coords(self.id)if pos[1]<=0:self.y=3if pos[3]>=self.canvas_height:self.hit_bottom=Trueif self.hit_paddle(pos)==True:self.y=-3if pos[0]<=0:self.x=3if pos[2]>=self.canvas_width:self.x=-3class Paddle:def __init__(self,canvas,color):self.canvas=canvasself.id=canvas.create_rectangle(0,0,100,10,fill=color)self.canvas.move(self.id,200,300)self.x=0self.canvas_width=self.canvas.winfo_width()self.canvas.bind_all('<KeyPress-Left>',self.turn_left)self.canvas.bind_all('<KeyPress-Right>',self.turn_right)def draw(self):self.canvas.move(self.id,self.x,0)pos=self.canvas.coords(self.id)if pos[0]<=0:self.x=0elif pos[2]>=self.canvas_width:self.x=0def turn_left(self,evt):self.x=-2def turn_right(self,evt):self.x=2tk=Tk()tk.title("Game")tk.resizable(0,0)tk.wm_attributes("-topmost",1)canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)canvas.pack()tk.update()paddle=Paddle(canvas, 'blue')ball=Ball(canvas,paddle, 'red')while 1:if ball.hit_bottom==False:ball.draw()paddle.draw()tk.update_idletasks()tk.update()time.sleep(0.01)Traceback (most recent call last):File "D:\弹球小游戏.py", line 67, in <module>ball.draw()File "D:\弹球小游戏.py", line 24, in drawself.canvas.move(self.id,self.x,self.y)TypeError: 'tuple' object is not callable总是报这种错,调半天了
1 回答
GCT1015
TA贡献1827条经验 获得超4个赞
第九行应该是self.canvas.move(self.id,245,100),你应该是手误打成了self.canvas.move = (self.id,245,100),
添加回答
举报
0/150
提交
取消