Close Menu
    Facebook LinkedIn YouTube WhatsApp X (Twitter) Pinterest
    Trending
    • Weaponized deepfakes: 10 Things That Matter in AI Right Now
    • RGB laser projector delivers huge ‘pixel-perfect’ 4K visuals
    • ANU spinout raises $36 million Series A to make AI chips
    • Best Chromebooks (2026): Most Are Bad, but These Aren’t
    • Appeals court revives Comanche challenge to Oklahoma tribal casino lawsuit
    • Dinnerly Meal Kits Start at $6 a Serving. We Tested the Budget-Friendly Service in 2026
    • How to Run OpenClaw with Open-Source Models
    • AI needs a strong data fabric to deliver business value
    Facebook LinkedIn WhatsApp
    Times FeaturedTimes Featured
    Wednesday, April 22
    • Home
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    • More
      • AI
      • Robotics
      • Industries
      • Global
    Times FeaturedTimes Featured
    Home»Artificial Intelligence»Coding the Pong Game from Scratch in Python
    Artificial Intelligence

    Coding the Pong Game from Scratch in Python

    Editor Times FeaturedBy Editor Times FeaturedFebruary 27, 2026No Comments18 Mins Read
    Facebook Twitter Pinterest Telegram LinkedIn Tumblr WhatsApp Email
    Share
    Facebook Twitter LinkedIn Pinterest Telegram Email WhatsApp Copy Link


    is without doubt one of the earliest and most iconic video games within the historical past of digital leisure. In its basic type, the sport simulates a desk tennis match with two paddles that transfer vertically throughout the display to hit a bouncing ball. Every of the participant controls a paddle and has to bounce the ball again to the opposite participant, or else they offer a degree to the other participant.

    The historical past of the sport is considerably attention-grabbing. The Pong recreation was created and written by Allan Alcom as a check when he was recruited by Atari. This recreation then grew to become an enormous success, promoting a great deal of machines internationally’s pubs and bars, and it so occurred that the machines would choke with the a great deal of cash individuals would put in, in order that ultimately the bars and pubs’ house owners needed to name Atari to repair their machines!

    On this tutorial, we’ll use Python’s Object Oriented Programming strategy to code the Pong recreation. That is an intermediate-level Python programming tutorial that requires one to have a preliminary data of Python fundamentals: checklist, …

    Understanding the Challenge

    There are a selection of how we will code this recreation. We are able to use the simple methodology and do every activity step-by-step with the required repetitions, or we will use Python’s Object Oriented Programming strategy to escapre the repetition and have a neat and arranged code. We’ll decide the second possibility as this might make the sport’s program extra systematic and fewer messy!

    We’ll use Python’s Turtle module for the visible recreation growth. The turtle module is a built-in performance that enables one to visulalize code in a straightforward method. It principally consists of a turtle that’s drawing shapes and contours because it strikes throughout the display in response to the coder’s directions. It’s a highly effective instrument to create beginner-level video games, and get on the spot suggestions via a visible display.

    The next are the important thing duties that we’ll strategy in an orderly method:

    1. Creating the Recreation Display – that is the display on which the Pong recreation will probably be displayed
    2. Creating the Paddle & Paddle Class – that is the code that may create a paddle on display, and configure its actions, which we’ll convert to a category as a blueprint to create 2 paddles, one on the left aspect and the opposite on the suitable aspect
    3. Creating the Ball Class and Objects – persevering with with the OOP strategy, we’ll create a generic ball class after which create the ball that may transfer throughout the display, we can even outline its related strategies
    4. Detecting Collision of Ball with High/Backside Wall -this is the piece of code that may detect collision with the higher and decrease partitions, and if collision happens, it would make the ball bounce throughout the y-axis
    5. Detecting Collision with Paddle – that is the piece of code that may detect whether or not the ball collides with the paddle. If sure, it would make the ball bounce; else, if the paddles misses the ball, it would give a rating to the other participant and restart the sport with the ball on the centre.
    6. Creating the Scoreboard Class and Object – that is the piece of code that features the creation of the Scoreboard class in a separate Python file and the creation of its object in the principle recreation file.

    Creating the Recreation Display

    The primary activity is to create the sport display. This display will probably be rectangular in form, as in the true recreation. We’ll first import the turtle module in or code and use its Display class to create the display object and customise it to have a width of 800px and a top of 600px utilizing the Display class setup() methodology. We’ll set the background colour to black utilizing the bgcolor() methodology, and title the display as “Pong Recreation” utilizing the title() methodology. Under is the code, the place we’ve got created the display object:

    from turtle import Turtle, Display
    
    #Establishing the Recreation Display
    display = Display()
    display.setup(width=800, top=600)
    display.bgcolor("black")
    display.title("Pong Recreation")
    
    
    display.exitonclick()

    Discover that we’ve got written the final line the place we’ve got used the display’s exitonclick() methodology in order to make sure the display will stay there till we click on on it.

    Should you discover any confusion within the above strategies, be happy to take a look at the official documentation of the Turtle Module from here.

    Following is the output as we run this system:

    Recreation Display (Picture by Writer)

    Creating the Paddle & Paddle Class

    The following activity is to create a paddle, which is a rectangular-shaped object at each side of the Recreation Display. We’ll create this paddle utilizing the turtle module’s form() operate, and customise it to be white in colour utilizing the colour() methodology, and use the shapesize() methodology to customize it to have a width of 20px and a top of 100px. Discover that we’ve got handed 5 and 1 because the arguments to the shapesize() methodology. It’s because the shapesize() shouldn’t be in pixels, however in reference to a base of 20px. So to get a size of 100px, we’ll cross 5 (as 20px x 5 = 100px). Furthermore, we’ll place it such that in the beginning of the sport it’s in the course of the suitable aspect, that’s, a y coordinate of 0 and an x coordinate of 350 (keep in mind our display is 800px huge). We’ll use the penup() methodology to take away the turtle’s hint and make it transfer to the specified location utilizing the goto() methodology.

    #Creating the Paddle
    paddle = Turtle()
    paddle.form("sq.")
    paddle.colour("white")
    paddle.shapesize(5,1)
    paddle.penup()
    paddle.goto(350,0)

    The next is the output of the above code. We are able to see a paddle created on the Recreation Display on the proper aspect, with none turtle hint.

    Paddle Creation (Picture by Writer)

    Working the above code will create the paddle. Nevertheless, we will see that the paddle is first created, after which it goes to its location. As a way to flip off the animation, we’ll add the display’s class tracer() methodology in our code. This can even require us to replace the display manually:

    #Retain the Authentic Code
    display.tracer(0)
    
    display.replace()
    display.exitonclick()

    Calling the tracer() methodology and passing it a worth of 0 will flip off the animation.

    As soon as we’ve got created the paddle and up to date the display by turning off the animations, subsequent is to configure the paddle actions. To do that, we’ll use display listeners. The display’s class hear() methodology permits us to hearken to keyboard occasions, and the onkey() methodology permits us to name an outlined operate every time a selected secret’s pressed. We’ll thus outline the go_up and go_down features that may make the paddle transfer up and down alongside the y-axis.

        def go_up():
            new_y = paddle.ycor() + 40
            paddle.goto(paddle.xcor(), new_y)
    
        def go_down():
            new_y = paddle.ycor() - 40
            paddle.goto(paddle.xcor(),new_y)

    As may be seen, we’ve got outlined the paddle’s up and down motion operate by making it transfer 40px vertically from its authentic place. Subsequent, we’ll use the display listeners functionality to permit these features to be referred to as on urgent keyboard keys.

    display.hear()
    display.onkey(paddle.go_up, "Up")
    display.onkey(paddle.go_down, "Down")
    Paddle Motion (Picture by Writer)

    Now that we’ve got created the paddle and configured the mechanism of its motion, allow us to now shift our code to Object Oriented Programming Method. It’s because we’ll want 2 paddles for the sport, and having a generic blueprint that creates paddles immediately will make our activity simpler. We’ll refactor our code to create one other paddle simply. We’ll transfer all of the paddle associated code to a different file and create the padlle class in it.

    For the reason that paddles we’re creating are in essence turtle objects, we’ll make this paddle class inherit from the Turtle class. So we’ll create a brand new python file in our PyCharm IDE and once more import the turtle module’s Turtle class on this separate Python file. Subsequent, we’ll use the category creation syntax and def __inti__() to outline the Paddle class. As each the left and proper paddles may have completely different positions throughout the sport display, we’ll add the x and y coordinates as attributes to the category.

    Now we’ll use the idea of inheritance in OOP and make the Turtle class the tremendous class, and the paddle class will inherit its attributes and strategies. Subsequent, we’ll simply substitute the phrase “paddle” in our former code the place we created the paddle with the “self” key phrase.

    from turtle import Turtle, Display
    
    class Paddle(Turtle):
        def __init__(self,x,y):
            # Creating the Paddle Objects
            tremendous().__init__()
            self.form("sq.")
            self.colour("white")
            self.shapesize(5, 1)
            self.penup()
            self.x = x
            self.y = y
            self.goto(x,y)
    
        # Configure Paddle Motion
        def go_up(self):
            new_y = self.ycor() + 40
            self.goto(self.xcor(), new_y)
    
        def go_down(self):
            new_y = self.ycor() - 40
            self.goto(self.xcor(),new_y)

    As may be seen above, we’ve got additionally outlined the 2 strategies of Paddle class. One is the upward motion and the second is the downward motion that we’ve got already outlined earlier. As soon as the Paddle class is outlined, we’ll create the paddle objects and configure the up and down actions of each paddles:

    from paddle import Paddle
    
    # Creating Paddle Objects
    left_paddle = Paddle(-350, 0)
    right_paddle = Paddle(350, 0)
    
    # Configuring Paddles' Motion
    display.hear()
    display.onkey(right_paddle.go_up, "Up")
    display.onkey(right_paddle.go_down, "Down")
    display.onkey(left_paddle.go_up, "w")
    display.onkey(left_paddle.go_down, "s")

    Working the Recreation

    As a way to run the sport and replace it utilizing the Display’s replace() methodology, we’ll outline some time loop that may proceed to run till externally stopped, or when the situation of the loop turns to False.

    #Recreation is ON:
    game_is_on = True
    whereas game_is_on:
        display.replace()

    Now, once you run the principle file, you will note the sport display and paddles created, and the power of the paddles to maneuver.

    Create the Ball Class & Objects

    Now persevering with on our OOP strategy to code this recreation, we’ll create the Ball class because the generic blueprint and create the ball object from it in our principal Python file. We’ll create the ball as a turtle object, by making the Ball class inherit from the tremendous class Turtle. We’ll use the turtle class’s strategies colour() and form() to initialize a ball of white colour in a round form. As earlier than, we’ll use the penup() methodology of turtle to cover the turtle’s hint.

    from turtle import Turtle
    
    class Ball(Turtle):
    
        def __init__(self):
            tremendous().__init__()
            self.colour("white")
            self.form("circle")
            self.penup()

    Now that our ball’s attributes are outlined, we can even create the ball’s strategies of shifting as quickly as the sport begins. The sport will begin with the ball being on the centre of the sport display, and when the display refreshes, will probably be shifting in the suitable route first. In our principal whereas loop we’ll name this methodology so the ball will proceed to maneuver all through when the sport is on, that’s, its x and y coordinates will change at each refresh of the sport display.

    The best way to make the ball transfer is by altering each its x and y coordinates by a sure quantity, allow us to say 10 in the meanwhile. We’ll outline the transfer() methodology of the ball and code the above situation:

    class Ball(Turtle):
    
        #Retain earlier code
        def transfer(self):
            new_x = self.xcor() + 10
            new_y = self.ycor() + 10
            self.goto(new_x, new_y)

    We’ll add this methodology of the ball object to be referred to as inside the sport’s whereas loop:

    #Recreation is ON:
    game_is_on = True
    whereas game_is_on:
        display.replace()
        ball.transfer()

    On operating the code, we see that the ball vanishes rapidly, and what we’re left with is simply the two paddles.

    Working the Code (Picture by Writer)

    We are able to resume the animation by commenting out the display.tracer() traces and rerunning the code. We’ll now see the two paddles and the ball being created and moved.

    Code with Animation (Picture by Writer)

    One other method to visualise that is utilizing the time module and bringing a delay in the principle whereas loop of the sport. This may be carried out as follows (with out commenting out the tracer() operate):

    import time
    
    #Retain the Authentic Code
    #Recreation is ON:
    game_is_on = True
    whereas game_is_on:
        time.sleep(0.1)
        display.replace()
        ball.transfer()
    

    Now you’ll be able to see that the ball strikes at a slower tempo and we will catch it with a paddle.

    Detecting Collision of Ball with High/Backside Wall

    Now that our ball is created and operating, we have to design a mechanism to make the ball bounce when it hits the highest and backside partitions, as for the left and proper partitions, the ball needs to be caught by the left and proper paddles. If the ball shouldn’t be caught, it might imply the opposite participant scores a degree.

    So, contemplating that our ball is shifting from the centre of the display to the highest proper nook, and it reaches the nook, it must bounce now. In straightforward phrases, bouncing would merely be a change of route within the y-axis, because the ball would nonetheless be going ahead within the x-axis. We’ll now outline a brand new methodology of the Ball class referred to as bounce() and name it in the principle recreation loop when the ball reaches the boundary:

    from turtle import Turtle
    
    class Ball(Turtle):
    
        def __init__(self):
            tremendous().__init__()
            self.colour("white")
            self.form("circle")
            self.penup()
            self.x_move = 10
            self.y_move = 10
    
        def transfer(self):
            new_x = self.xcor() + self.x_move
            new_y = self.ycor() + self.y_move
            self.goto(new_x, new_y)
    
        def bounce(self):
            self.y_move *= -1
    

    Discover that within the above, we’ve got outlined 2 new attributes of the Ball class, the x_move and the y_move, and have made them equal to 10. Then, within the transfer() methodology, we’ve got changed the determine of 10 with these attributes. As may be seen, this is useful for our bounce() methodology. Now, every time the ball bounces, it would transfer in the other way to its earlier y place. This merely signifies that if the ball goes up, and collides with the wall, the y_move would change from +10 to -10, and the ball will transfer downwards, because the unfavourable quantity would imply the ball is shifting down. Consequently, a collision with the underside wall would change this y_move from -10 to +10, and the ball will then transfer upwards.

    Now, allow us to add this situation in the principle whereas loop:

    whereas game_is_on:
        #Retain Authentic Code
    
        #Detect Collision with High and Backside Partitions
        if ball.ycor() > 275 or ball.ycor() < -275:
            ball.bounce_y()

    Within the code above, we’ve got added the situation of the collision with the partitions to be detected, after which the bounce() methodology to be referred to as. You need to use any worth for the boundaries, however via repeated tries, the worth of 275 is sweet sufficient!

    Ball Collision with High Wall (Picture by Writer)

    Detecting Collision with Paddle

    Now that we all know how one can make the ball bounce from the highest and backside partitions, the following step is to detect a collision with the paddle and make the ball bounce from the paddle. We’ll make use of a similiar methodology as earlier than, besides that now we’re speaking in regards to the x-axis.

    The traditional method to detect a collision between the ball and the wall is to make use of the gap methodology. If the gap between the 2 is lower than a specific amount, we will conclude that the two have touched/collided. Nevertheless, know that the distance() operate works by calculating the gap between the facilities of the 2 turtle objects. In our case, one is a 20x20px ball, and the opposite is a 20×200 rectangular paddle. The gap between them would fluctuate alongside the size of the paddle. If the ball hits the paddle on its edge, the gap() methodology would fail to conclude that each of them have made contact.

    We are able to add one other situation which might verify if the ball has gone previous a sure level on the x-axis, over to the suitable (within the case of the suitable paddle), and it’s inside a 50px distance from the paddle, then the ball should have made contact. We’ll add this situation to the principle whereas loop. As soon as the collision is detected, we may have the ball bounce, however this time within the x-direction. Allow us to redefine our bounce features so we’ve got each bounce features, one for the x-axis when colliding with pthe addle, and the opposite on the y-axis when colliding with the wall:

        def bounce_y(self):
            self.y_move *= -1
    
        def bounce_x(self):
            self.x_move *= -1
    whereas game_is_on:
        ...
    
        # Detect Collision of the Ball with the Proper Paddle
        if ball.distance(right_paddle) < 50 and ball.xcor() > 320:
            ball.bounce_x()
    
        # Detect Collision of the Ball with the Left Paddle
        elif ball.distance(left_paddle) < 50 and ball.xcor() < -320:
            ball.bounce_x()

    Observe, we’ve got added a worth of 320 after some hit and trial and visualizations of the ball colliding with the paddle.

    Ball Collision with Paddle (Picture by Writer)

    If one of many paddles misses the ball, then the opposite participant will get a degree, and the sport restarts with the ball within the centre. As a way to verify if the ball is missed by the paddle, we will visualize this by contemplating the ball going past a sure level on the horizontal axis. We all know that the width of the display is 800 and the paddle is at 350 alongside the x-axis, so the paddle truly goes from 340 to 360 because it has a width of 20px, so if the ball goes past the 360 x axs, it means the paddles has missed the ball. This may imply we’ll reset the ball to the beginning place on the centre worth (0,0). We’ll outline a reset_position() methodology of the ball that will probably be referred to as when the above situation is met. Furthermore, we can even add a function that may reverse the ball’s route, so as a substitute of going to the suitable, it would go to the left.

    Class Ball(Turtle):
        ...
        def reset_position(self):
            self.goto(0, 0)
            self.bounce_x()

    The bounce_x() methodology will trigger the ball to reverse route because it did when it might bounce off a paddle. Placing these circumstances within the recreation’s principal whereas loop:

    whereas game_is_on:
        ...
        # Detect Proper Paddle Lacking the Ball
        if ball.xcor() > 380:
            ball.reset_position()
    
        # Detect Left Paddle Lacking the Ball
        if ball.xcor() < -380:
            ball.reset_position()

    Working the code above will present us what occurs when a paddle misses the ball; the ball would reverse its route and would go to the opposite padlle. Now all that’s left is to create a scoreboard to retailer and show the rating for every participant.

    Creating the Scoreboard

    As a way to show and replace the rating for every participant, we’ll outline a scoreboard class in a brand new python file. We’ll create the Scoreboard class inheriting from the turtle class, and can outline the attributes that may assist the turtle object to write down. First we’ll initialize the 2 attributes, l_score and r_score and set them to 0 in the beginning of the sport. We’ll outline two strategies, l_point and r_point which will probably be referred to as every time a participant misses the ball, and can improve the factors of the opposite person. We can even outline a way referred to as update_scoreboard(), and name it when a participant scores a further level. This methodology, when referred to as will merely replace the scoreboard.

    Following is the Scoreboard Class creation:

    from turtle import Turtle
    
    class Scoreboard(Turtle):
        def __init__(self):
            tremendous().__init__()
            self.colour("white")
            self.penup()
            self.hideturtle()
            self.l_score = 0
            self.r_score = 0
            self.update_scoreboard()
    
        def update_scoreboard(self):
            self.clear()
            self.goto(-100, 200)
            self.write(self.l_score, align="heart", font=("Arial", 40, "regular"))
            self.goto(100, 200)
            self.write(self.r_score, align="heart", font=("Arial", 40, "regular"))
    
        def l_point(self):
            self.l_score += 1
            self.update_scoreboard()
    
        def r_point(self):
            self.r_score += 1
            self.update_scoreboard()

    The update_scoreboard() methodology creates a turtle that writes the rating of each gamers on the principle display. Discover that we’ve got used the Turtle module’s write() operate in right here.

    Subsequent we’ll import and create a scoreboard object in the principle file, and we’ll use this object to entry its strategies, satisfying the 2 circumstances: every time a participant’s paddle misses the ball, the opposite participant would get a degree.

    from scoreboard import Scoreboard
    
    #Initializing Scoreboard Object
    scoreboard = Scoreboard()
    
    whereas game_is_on:
        ...
       # Detect Proper Paddle Lacking the Ball
        if ball.xcor() > 380:
            ball.reset_position()
            scoreboard.l_point()
    
        # Detect Left Paddle Lacking the Ball
        if ball.xcor() < -380:
            ball.reset_position()
            scoreboard.r_point()

    That is the place the sport designing and coding involves its finish. Runing the principle python file will generate the sport display and its elements, with the ball shifting as the sport begins. Now you simply must fins a participant to play this recreation with!

    You can even change the velocity of the sport via some adjustments within the code (that’s so that you can work out!)

    Conclusion

    On this article, we’ve got developed the basic Pong recreation with the assistance of the Python Turtle module. We now have used the idea of Object Oriented Programming to create courses, initialize attributes and strategies, and from these courses create objects in the principle recreation file. That is an intermediate-level Python challenge, and for those who stumbled upon some a part of the code, be certain to both consult with the Python official documentation or revise your fundamental ideas, significantly OOP on this case.



    Source link

    Share. Facebook Twitter Pinterest LinkedIn Tumblr Email
    Editor Times Featured
    • Website

    Related Posts

    How to Run OpenClaw with Open-Source Models

    April 22, 2026

    I Replaced GPT-4 with a Local SLM and My CI/CD Pipeline Stopped Failing

    April 22, 2026

    How to Call Rust from Python

    April 22, 2026

    Inside the AI Power Move That Could Redefine Finance

    April 22, 2026

    Git UNDO : How to Rewrite Git History with Confidence

    April 22, 2026

    DIY AI & ML: Solving The Multi-Armed Bandit Problem with Thompson Sampling

    April 21, 2026

    Comments are closed.

    Editors Picks

    Weaponized deepfakes: 10 Things That Matter in AI Right Now

    April 22, 2026

    RGB laser projector delivers huge ‘pixel-perfect’ 4K visuals

    April 22, 2026

    ANU spinout raises $36 million Series A to make AI chips

    April 22, 2026

    Best Chromebooks (2026): Most Are Bad, but These Aren’t

    April 22, 2026
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    About Us
    About Us

    Welcome to Times Featured, an AI-driven entrepreneurship growth engine that is transforming the future of work, bridging the digital divide and encouraging younger community inclusion in the 4th Industrial Revolution, and nurturing new market leaders.

    Empowering the growth of profiles, leaders, entrepreneurs businesses, and startups on international landscape.

    Asia-Middle East-Europe-North America-Australia-Africa

    Facebook LinkedIn WhatsApp
    Featured Picks

    Wingcube expandable tent camper

    February 16, 2026

    US denies visas to ex-EU commissioner and others over social media rules

    December 24, 2025

    Unlocking the mysteries of complex biological systems with agentic AI

    November 14, 2024
    Categories
    • Founders
    • Startups
    • Technology
    • Profiles
    • Entrepreneurs
    • Leaders
    • Students
    • VC Funds
    Copyright © 2024 Timesfeatured.com IP Limited. All Rights.
    • Privacy Policy
    • Disclaimer
    • Terms and Conditions
    • About us
    • Contact us

    Type above and press Enter to search. Press Esc to cancel.