~ OOP,Classes,Python,Tkinter ...recreating PONG


Step 9: Create Bat Movement

Code and Challenge

Copy and paste the code below. Run it! Read the task and see if you can do it before moving on to the next challenge


"""
==========Task===============
Experiment with the movement of the bat - how can you fine tune it to your specifications/requirements
"""

from tkinter import *
import random
import time

class Ball: 
    def __init__(self,canvas,color): 
        self.canvas=canvas 
        self.id=canvas.create_oval(30,30,50,50,fill=color) 
        self.canvas.move(self.id,100,200)
        starting_position=[-3,-2,-1,1,2,3] 
        random.shuffle(starting_position) 
        self.x = starting_position[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=6
        if pos[3] >=self.canvas_height: 
            self.y=-6
        if pos[0] <=0:
            self.x=6
        if pos[2]>=self.canvas_width:
            self.x=-6

#===PONG BAT CLASS====
class Pongbat():
    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 #add the x object variable here in the __init__ function of our bat class
        self.canvas_width=self.canvas.winfo_width() #create a variable for the canvas width, as we did with the ball
        #Binding the methods/functions leftturn and rightturn below to the correct keys
        self.canvas.bind_all('',self.left_turn)
        self.canvas.bind_all('',self.right_turn)
        

    def draw(self): #add to the draw function (similar to the ball function's method)
        self.canvas.move(self.id,self.x,0) #move the bat in the direction of the x variable
        pos=self.canvas.coords(self.id)
        if pos[0]<=0: #if the left x coordinate is less than or equal to 0, then we don't want the bat to bounce, we want it to STOP
            self.x=0
        if pos[2]>=self.canvas_width: #same situation here, when the right x coordinate is greater than or equal to the width, then stop! 
            self.x=0
        

        #===ADD FUNCTIONS /METHODS FOR CHANGING DIRECTION BETWEEN LEFT AND RIGHT
        #Note: We use binding to bind these functions to the correct key (e.g. left or right) in the__init__function 
    def left_turn(self,evt):
        self.x=-10 #change this variable to increase or decrease the speed of the pong bat!

    def right_turn(self,evt):
        self.x=10
        

        
        

def main():
    tk=Tk()
    tk.title("My 21st Century Pong Game")
    tk.resizable(0,0)
    tk.wm_attributes("-topmost",1)
    canvas=Canvas(tk,bg="white",width=500,height=400,bd=0,highlightthickness=0)
    canvas.pack()
    tk.update()

    ball1=Ball(canvas,'green')
    bat1=Pongbat(canvas,'red')
    while 1:
        tk.update()
        ball1.draw()
        bat1.draw() 
        time.sleep(0.02) 
main()


#note - an ERROR may be caused as Python is complaining about breaking out of the while loop when the window is closed - you can ignore that for now (or a fix is provied in the solutions section for those who are interested"""



Code your solution here

Systems Life Cycle (in a nutshell): Analyse - Design - Create - Test - Evaluate. Designing something or writing out some pseudocode before you actually write code is always a good idea! Get in to the habit of doing so! You can draw your flowchart here and screenshot it.

A sample flow chart (design) for this particular challenge could look like:

Flowchart: Python program to get the Fibonacci series between 0 to 50
Each challenge section below provides an online drawing tool where you can dynamically create flowcharts. Screenshot them into your presentation for submission.

Solutions & Answers

Answers /Solutions in the "members area" drive under: "Solve and Learn >>SOLUTIONS"

Testing Table

You may want to read a little about Testing first. A teacher may go through some examples with you. Feel free to fill in the test table here, and screenshot it in to your powerpoint. Testing is absolutely essential once you have created a program!
Test No. Description Test Data(input) Expected Outcome Actual Outcome Further Action?
1
2
3
4
5
Coming soon!