Antony Tang 2021-03-21 14:46 采纳率: 80%
浏览 47
已采纳

python tkinter ,画布反弹球小游戏,应该怎么改?

有哪位大佬能告诉我怎么修改吗?

源代码如下,注释为解释器的报错。

from tkinter import *
from random import *
import time

class Ball:
    def _init_(self,canvas,color,winW,winH,racket):
        self.canvas =canvas
        self.racket =racket
        self.id =canvas.create_oval(0,0,20,20,fill=color)
        self.canvas.move(self.id,winW/2,winH/2)
        startPos=[-4,-3,-2,-1,1,2,3,4]
        sjuffle(starPos)
        self.x =startPos[0]
        self.y =-step
        self.notTouchBottom =True
    def hitRacket(self,ballPos):
        racketPos =self.canvas.coords(self.racket.id)
        if ballPos[2] >=racketPos[0] and ballPos[0] <= racketPos[2]:
            if ballPos[3] >= racketPos[1] and ballPos[3] <= racketPos[3]:
                return True
        return False
    def ballMove(self):
        self.canvas.move(self.id,self.x,self.y)
        ballPos =self.canvas.coord(self.id)
        if ballPos[0] <=0:
            self.x =step
        if ballPos[1] <=0:
            self.y =step
        if ballPos[2] >= winW:
            self.x =-step
        if ballPos[3] >= winH:
            self.y =-step
        if self.hitRacket(ballPos) == True:
            self.y = -step
        if ballPos[3] >= winH:
            self.notTouchBottom = False
class Racket:
    def _init_(self,canvas,color):
        self.canvas =canvas
        self.id =canvas.creat_rectange(0,0,100,15,fill=color)
        self.canvas.move(self.id,270,400)
        self.x =0
        self.canvas.bind_all('<KrypPress-Right>',self.moveRight)
        self.canvas.bind_all('<KeyPress-Left>',sef,moveLeft)
    def racktMove(self):
        self.canvas.move(self.id,self.x,0)
        racketPos =self.canvas,coords(self.id)
        if racketPos[0] <= 0:
            self.x=0
        elif racketPos[2] >= winW:
            self.x = 0
    def moveLeft(self,event):
        self.x =-3
    def moveRight(slef,event):
        self.x =3
winW = 640
winH =480
step =3
speed =0.01
tk=Tk()
tk.title('Bouncing Ball')
tk.wm_attributes('-topmost',1)
canvas =Canvas(tk,width=winW,height=winH)
canvas.pack()
tk.update()
racket =Racket(canvas,'purple','purple')
ball =Ball(canvas,'yellow',winW,winH,racket)
while ball.notTouchBottom:
    try:
        ball.ballMove()
    except:
        print('单机关闭按钮终止程序运行')
        break
    racket.racketMove()
    tk.update()
    time.sleep(speed)

#line 66, in <module>
#    racket =Racket(canvas,'purple','purple')
#TypeError: Racket() takes no arguments

希望能得到各位大佬的帮助。

  • 写回答

1条回答 默认 最新

  • m0_50244597 2021-03-21 18:24
    关注

    是__init__而不是_init_

    旁边跟的是两个_

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵