Question: Python Pong Game Hello, I need help adding these functionalities to a pong game that I've made: -Have the user drag the paddle up and

Python Pong Game

Hello, I need help adding these functionalities to a pong game that I've made:

-Have the user drag the paddle up and down using the mouse pointer when holding down the left-mouse button.

-Bounce the disk off the paddle when it hits it from the left or from the right.

-Provide a "target slot" on the left edge of the canvas. When the disk hits the target "slot", it does not bounce back, but instead passes through

================================================Here is the original code:==================================================

from tkinter import * import random

class ControlAnimation: def __init__(self):

my_window = Tk() # create a window my_window.title("Control Animation Demo")

self.width = 400 self.height = 200 self.line_x = 350 self.line_top = 75 self.line_bot = 125 self.paddle_width self.dy = 5 self.sleep_time = 50 self.is_stopped = False self.my_canvas = Canvas(my_window, bg = 'white', \ width = self.width, height = self.height) self.my_canvas.pack()

frm_control = Frame(my_window) # for comand buttons below canvas frm_control.pack() btn_stop = Button(frm_control, text = 'Stop', \ command = self.stop) btn_stop.pack(side = LEFT) btn_resume = Button(frm_control, text = 'Resume', \ command = self.resume) btn_resume.pack(side = LEFT) btn_faster = Button(frm_control, text = 'Faster', \ command = self.faster) btn_faster.pack(side = LEFT) btn_slower = Button(frm_control, text = 'Slower', \ command = self.slower) btn_slower.pack(side = LEFT)

self.radius = 20 self.x = self.radius # just to start; y is at canvas center self.y = self.height/2 # (x, y) is center of disk for this program, but ... # recall: x1,y1 and x2,y2 form a bounding box for disk self.my_canvas.create_oval(\ self.x - self.radius, self.height/2 + self.radius,\ self.x + self.radius, self.height/2 - self.radius,\ fill = "red", tags = "disk") self.my_canvas.create_line(self.line_x, self.line_top, \ self.line_x, self.line_bot, \ width = self.paddle_width, fill = "blue", tags = "paddle") self.my_canvas.bind("", self.move_paddle) self.my_canvas.bind("", self.move_paddle) self.my_canvas.bind("", self.left_click_paddle) self.my_canvas.bind("", self.right_click_paddle) self.animate() self.my_canvas.focus_set() my_window.mainloop()

def stop(self): self.is_stopped = True

def resume(self): self.is_stopped = False self.animate()

def faster(self): if self.sleep_time > 5: self.sleep_time -= 15

def slower(self): self.sleep_time += 15

def animate(self): dx = 3 dy = 2 while not self.is_stopped : self.my_canvas.move("disk", dx, dy) # move right self.my_canvas.after(self.sleep_time) # sleep for a few ms # redraw/update the canvas w/ new oval position self.my_canvas.update() # increment x to set up for next re-draw r = random.randint(-1, 1) self.x += dx # moves the disk if self.x + self.radius > self.width: # hit right boundary dx = -dx + r # add randomness elif self.x - self.radius <= 0: # hit left boundary dx = -dx + r # add randomness # increment x to set up for next re-draw self.y += dy if self.y + self.radius > self.height: # hit bottom boundary dy = -dy elif self.y - self.radius <= 0: # hit top boundary dy = -dy def move_paddle(self, event): print(" keysym =", event.keysym) print(" char =", event.char) print("keycode =", event.keycode) print("-"*30) self.my_canvas.delete("paddle") if event.keycode == 38: # up arrow self.line_top += self.dy self.line_bot += self.dy self.my_canvas.create_line(self.line_x, self.line_top, \ self.line_x, self.line_bot, \ width = 10, fill = "blue", tags = "paddle") def left_click_paddle(self, event): print(" clicked at =", event.x, event.y) print("-"*30) self.move_paddle( -self.dy)

def right_click_paddle(self, event): print(" clicked at =", event.x, event.y) print("-"*30) self.move_paddle( self.dy) def move_paddle(self, increment): self.line_top += increment self.line_bot += increment self.my_canvas.delete("paddle") self.my_canvas.create_line(self.line_x, self.line_top, \ self.line_x, self.line_bot, \ width = 10, fill = "blue", tags = "paddle") ControlAnimation() # create instance of the GUI

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!