DEV Community

Cover image for Developing a Traditional Pong Game Using PyGame - Incorporating an AI Opponent
Developer Service
Developer Service

Posted on • Originally published at developer-service.blog

Developing a Traditional Pong Game Using PyGame - Incorporating an AI Opponent

Pong, one of the earliest arcade video games, offers a simple yet captivating gameplay experience. It involves two paddles and a ball, with players controlling the paddles to hit the ball back and forth.

The game's simplicity makes it an excellent project for beginners in game development, especially when utilizing Python's PyGame library.

This article explores how to develop a traditional Pong game using PyGame and elevate it by incorporating an AI opponent, adding layers of complexity and fun.


Getting Started with PyGame

PyGame is a set of Python modules designed for writing video games. It includes graphics and sound libraries that help in creating fully featured games and multimedia programs in Python.
Prerequisites

Before we begin, make sure you have the following prerequisites installed:

  • Python 3.x: You can download the latest version of Python from the official website: https://www.python.org/downloads/
  • Pygame: Once you have Python installed, you can install Pygame using pip by running the following command: pip install pygame

This tutorial will continue on the implementation of the previous article:
Creating a Classical Pong Game with PyGame: A Step-by-Step Tutorial


Incorporating AI to Control a Paddle

To introduce an AI opponent, we implement a function named ai_movement to control the right paddle's movement.

This function calculates the ideal position for the paddle based on the ball's position and moves it accordingly. The AI uses simple logic: it moves the paddle up if the ball is above its center and down if it is below.

This basic AI makes the game playable against a computer-controlled opponent.

Let's see the corresponding code:

# AI movement
def ai_movement(paddle, ball):
    if ball.y < paddle.centery:
        paddle.top -= 5
    elif ball.y > paddle.centery:
        paddle.bottom += 5

    # Ensure it stays within the screen bounds
    if paddle.top < 0:
        paddle.top = 0
    elif paddle.bottom > HEIGHT:
        paddle.bottom = HEIGHT     
Enter fullscreen mode Exit fullscreen mode

We also need to update our game loop to move the right paddle with the AI movement:

# Game loop
while True:
    # Event handling
    ...

    # Paddle movement left paddle
    ...

    # Paddle movement right paddle (AI-controlled)
    ai_movement(paddle_right, ball)
Enter fullscreen mode Exit fullscreen mode

Let's see now our AI paddle in action:

You might think the AI paddle rarely misses the ball, except in edge cases. Of course, this would make it difficult to play against, so let's see how we can implement an easier-to-play AI.


Excited to dive deeper into the world of Python programming? Look no further than my latest ebook, "Python Tricks - A Collection of Tips and Techniques".

Get the eBook

Inside, you'll discover a plethora of Python secrets that will guide you through a journey of learning how to write cleaner, faster, and more Pythonic code. Whether it's mastering data structures, understanding the nuances of object-oriented programming, or uncovering Python's hidden features, this ebook has something for everyone.


How Can AI Miss the Ball?

To make the AI miss the ball occasionally, we can introduce a small random chance for the AI to make a mistake.

We'll modify the ai_movement function to include a random factor that determines whether the AI will move correctly or make a mistake.

Here's the updated ai_movement function:


Full article at: https://developer-service.blog/creating-a-classical-pong-game-with-pygame-adding-ai-player/

Top comments (2)

Collapse
 
sloan profile image
Sloan the DEV Moderator

Hi there, we encourage authors to share their entire posts here on DEV, rather than mostly pointing to an external link.

Sharing your full posts helps ensure that readers don’t have to jump around to too many different pages, and it helps focus the conversation right here in the comments section on DEV.

To be clear, the DEV Terms state:

Posts must contain substantial content β€” they may not merely reference an external link that contains the full post.

Also, if you share your full post, you have the option to add a canonical URL directly to your post. This helps with SEO if you are reposting articles!

Collapse
 
devasservice profile image
Developer Service

Hi, thanks for the feedback and information.

I will start to include the full articles.