Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Bounce Game Problems
#1
So i finished the Bounce game and when I hit run it didn't work so I checked the errors it gave and the lines it told me but it's the same code from the book. So maybe you can find an error with it. I also put the error it gave me.
import time
import random
from tkinter import *

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()
        self.hit_bottom = False
		
    def hit_paddle(self, pos):
        paddl_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, self.y)
        pos = self.canvas.coords(self.id)
        if pos[1] <= 0:
            self.y = 1
        if pos[3] >= self.canvas_height:
            self.hit_bottom = True
        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 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=400, 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()
        ball.draw()
        paddle.draw()
        tk.update_idletasks()
        tk.update()
        time.sleep(0.01)
 

	
Error:
Traceback (most recent call last): File "C:\Users\sheep\Desktop\Ayden's Apps\Bounce The Game.py", line 76, in <module> ball.draw() File "C:\Users\sheep\Desktop\Ayden's Apps\Bounce The Game.py", line 32, in draw if self.hit_paddle(pos) == True: File "C:\Users\sheep\Desktop\Ayden's Apps\Bounce The Game.py", line 21, in hit_paddle if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]: NameError: name 'paddle_pos' is not defined
Reply
#2
The error message is correct, paddle_pos has not been defined anywhere in the code you posted. It is perhaps paddle.pos but then you will have to change it in the Paddle class as well. It's best to ask this question of whoever wrote this code as the layout is not clear.
Reply
#3
(Apr-25-2018, 08:09 PM)SheeppOSU Wrote: paddl_pos = self.canvas.coords(self.paddle.id)
if pos[2] >= paddle_pos[0] and pos[0] <= paddle_pos[2]:


Check your spelling :p
Reply
#4
yes that worked but the blue paddle isn't moving at all
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Easy equipment system for simple game and problems with it naisyrk 3 3,291 Sep-01-2018, 10:05 AM
Last Post: Gribouillis
  Coding Problems With Mr.Stickman Game SheeppOSU 2 4,150 Jun-29-2018, 08:12 PM
Last Post: volcano63

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020