AttributeError: 'Ball' object has no attribute 'hit_paddle'

Discussion in 'Python' started by nica1123, Feb 5, 2019.

  1. nica1123

    nica1123

    Joined:
    Feb 5, 2019
    Messages:
    1
    Likes Received:
    0
    Beginner here. I am trying to do the game bounce.
    This is the error message:

    Traceback (most recent call last):
    File "C:\Users\Anthony\AppData\Local\Programs\Python\Python36-32\paddlebounce.py", line 76, in <module>
    ball.draw()
    File "C:\Users\Anthony\AppData\Local\Programs\Python\Python36-32\paddlebounce.py", line 24, in draw
    if self.hit_paddle(pos) == True:
    AttributeError: 'Ball' object has no attribute 'hit_paddle'
    >>>

    Code (Python):
    from tkinter import *
    import random
    import time
    class Ball:
        def __init__(self, canvas, paddle, color):
            self.canvas = canvas
            self.paddle = paddle
            self.id = canvas.create_oval(10, 10, 25, 25, fill=color)
            self.canvas.move(self.id, 245, 100)
            starts = [-3, -2, -1, 1, 2, 3]
            random.shuffle(starts)
            self.x = starts[0]
            self.y = -3
            self.canvas_height = self.canvas.winfo_height()
            self.canvas_width = self.canvas.winfo_width()

        def draw(self):
            self.canvas.move(self.id, self.x, self.y)
            pos = self.canvas.coords(self.id)
            if pos[1] <= 0:
                self.y = 3
            if pos[3] >= self.canvas_height:
                self.y = -3
            if self.hit_paddle(pos) == True:
                self.y = -3
            if pos[0] <= 0:
                self.x = 3
            if pos[2] >= self.canvas_width:
                self.x = -3

    class Paddle:
        def __init__(self, canvas, color):
                self.canvas = canvas
                self.id = canvas.create_rectangle(0, 0, 100, 10, fill=color)
                self.canvas.move(self.id, 200, 300)
                self.x = 0
                self.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 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 True
            return False    
       
           
        def draw(self):
            self.canvas.move(self.id, self.x, 0)
            pos = self.canvas.coords(self.id)
            if pos[0] <= 0:
                self.x = 0
            elif pos[2] >= self.canvas_width:
                self.x = 0
         
        def turn_left(self, evt):
            self.x = -2

        def turn_right(self, evt):
            self.x = 2
           
           
    tk = 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:
        ball.draw()
        paddle.draw()
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)
       
     
    What am I doing wrong? I have been trying to figure it out for over a week.
     
    nica1123, Feb 5, 2019
    #1
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.