With the boom in the gaming industry and the rising popularity of indie game development, learning how to create games has never been more appealing. If you are ready to embark on your journey to becoming a game developer, then mastering a library like Pygame is a great place to start. In this tutorial, we will learn about Pygame, a cross-platform set of Python modules that are designed for game creation.
Table of contents
What is Pygame?
The first thing to understand is what Pygame is. Pygame is a free and open-source Python library used for scripting 2D video games. It provides computer graphics and sound libraries, all designed to help you create a fully fledged video game with Python.
What is it for?
As stated earlier, Pygame is created with the goal of video game development in mind. But the power of Pygame extends beyond just games. It can also be used to create other multimedia applications like animations or interactive stories. Thus, knowing how to use Pygame lets you create a wide range of media.
Why should you learn Pygame?
Learning Pygame is beneficial for multiple reasons. Firstly, for those with an interest in game development, this is an amazing library to get started. The skills you acquire through learning Pygame can also help you grasp other game development libraries and frameworks. Secondly, Pygame is in Python, a language famous for its readability and simplicity. This makes Pygame a great starting point for beginners in programming and game development.
The first step to working with Pygame is to install it. You can do this by using pip, Python’s package installer. Open your command line or terminal and type in the following:
pip install pygame
If you’re using Python 3, you might have to use pip3 instead:
pip3 install pygame
Creating a Pygame Window
Once you’ve installed Pygame, you can create a new Python file and import the Pygame module. The first step in developing a Pygame application is creating a window for the game. Here’s how you do it:
import pygame # initialize Pygame pygame.init() # set the size of the Pygame window screen = pygame.display.set_mode((800, 600)) # game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()
In Pygame, you can handle events in the game loop. Events are changes or actions that are detected by the software. For example, a mouse click or a key press can be an event. Here’s how to handle a basic event like closing the window:
# game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit()
# creating a rectangle rectangle = pygame.draw.rect(screen, (255,255,255), pygame.Rect(30, 30, 60, 60))
The first argument is where we want to draw, the second one is the color of the shape, the third one is the position and size of the shape. The color is a tuple with 3 values for the RGB values.
Creating static objects is one thing, but for a game, we need movement! In Pygame, you can create moving objects by updating their position in each iteration of the game loop. Consider this example of a rectangle that moves horizontally:
# initial position x = 0 y = 50 # game loop running = True while running: # check for QUIT event for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # draw rectangle on screen screen.fill((0,0,0)) pygame.draw.rect(screen, (255, 255, 255), pygame.Rect(x, y, 60, 60)) # update position x += 1 # update display pygame.display.flip() pygame.quit()
The position is updated before flipping or refreshing the screen, and the screen is cleared at the start of each loop with screen.fill.
Loading and Displaying Images
Games are more than just shapes and colors – they are composed of images. Pygame can load and display images with ease. Let’s load an image and display it on our Pygame window:
# load the image image = pygame.image.load('image.png') # game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # display the image screen.blit(image, (50, 50)) pygame.display.flip() pygame.quit()
We use the blit function to draw the image at the specified coordinates.
A silent game definitely feels incomplete. Pygame gives you the ability to play sounds. This is how you can load and play a sound:
# load the sound sound = pygame.mixer.Sound('sound.wav') # play the sound sound.play()
In this example, the code loads a WAV file and plays the sound. Now our game has audio!
And that’s it! The basics of Pygame covered. These are just the foundations – Pygame offers a plethora of features and possibilities awaiting to be discovered. As with any programming or development skill, practice is key. Start simple and bit by bit, construct your gaming world as you master Pygame. Join us at Zenva where we offer courses that will take you deeper into the world of game development with Pygame!
Handling User Inputs
Apart from system-triggered events, user-driven events are the core to any interactive game. Pygame provides a way to detect keyboard and mouse inputs. Let’s take a look at how you can detect user input from the keyboard:
# game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False keys = pygame.key.get_pressed() if keys[pygame.K_UP]: print("You pressed the UP key!") pygame.display.flip() pygame.quit()
The pygame.key.get_pressed() function returns a list of Boolean values representing the state of each key. If a key is pressed, the value at the index of that key in the list will be True.
A critical aspect in many games is collision detection. Pygame provides us with the colliderect method to easily check for collisions. Consider this example:
rect1 = pygame.Rect(50, 50, 50, 50) rect2 = pygame.Rect(100, 100, 50, 50) if rect1.colliderect(rect2): print("The rectangles are colliding!")
In Pygame, a Sprite is a two-dimensional image that is part of the larger graphical scene. To animate a sprite, we need multiple images or “frames”. Let’s see how to animate a sprite:
# Load the sprite sheet sprite_sheet = pygame.image.load('sprite_sheet.png') # Create a list to hold the frames frames =  # Assume each frame is 64x64 pixels - append each one to the list for i in range(5): frame = sprite_sheet.subsurface(pygame.Rect(i * 64, 0, 64, 64)) frames.append(frame) # Now we can animate it in our game loop current_frame = 0 # game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Draw the current frame screen.blit(frames[current_frame], (50, 50)) # Update the frame number current_frame = (current_frame + 1) % len(frames) # Update the screen pygame.display.flip() pygame.quit()
In this code, each frame is clipped from the sprite sheet and stored in a list. In every iteration of the game loop, the next frame from the list is drawn to the screen.
Managing Game State
A large game can have multiple states or “screens”, such as the main menu, game over screen, high score screen, etc. To manage these states, we can use a simple state machine. Here’s a very basic example:
# Game states MAIN_MENU = 0 PLAYING = 1 GAME_OVER = 2 # Start on the main menu state = MAIN_MENU # game loop running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False if state == MAIN_MENU: # Draw the main menu pass elif state == PLAYING: # Run the game pass elif state == GAME_OVER: # Show the game over screen pass pygame.display.flip() pygame.quit()
In this example, we’re using simple integers to define the states. Depending on the current state, the game might behave differently. You can implement more states based on what you require.
Typical Main Game Loop in Pygame
Upon learning all the basics, let’s see how a typical main game loop in Pygame looks like:
# game loop running = True while running: # event handling for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # game logic update_game_state() # drawing draw_game_state() # flip the double buffer pygame.display.flip() pygame.quit()
This structure separates our game’s logic (updating the game state) from its presentation (drawing the game state). It also allows us to adjust the game’s speed separately from the framerate.
As we delve deeper into the various functionalities that Pygame offers, the scope of what can be achieved through Pygame becomes more apparent. The key to truly mastering Pygame lies in experimenting and building. So, start creating your games using Pygame and let your imagination run wild! And remember, we at Zenva are always there for support on your game development journey!
How to Keep Learning
Learning Pygame is the first step in a fantastic journey towards game development. But the learning process is never-ending, especially in a field as dynamic and ever-evolving as this. To continue sharpening your Python skills, consider pursuing further education and training.
We at Zenva encourage you to take the next step in your learning journey with our Python Mini-Degree. This comprehensive collection of Python courses covers everything from coding basics to advanced algorithms, object-oriented programming, game development, and app development. Our courses are designed for learners of all levels – those starting from scratch and those who wish to enhance their existing skills. The courses include hands-on projects, providing you the opportunity to build a portfolio of Python projects. The curriculum can be accessed anytime, anywhere, making learning Python with us a flexible and convenient process.
If you’re interested in taking on a broader range of Python courses, check out our full selection of Python Courses. These courses have assisted over 1 million learners and developers in achieving their goals – from publishing games and landing dream jobs to launching their own businesses. Remember, with Zenva, you can go from beginner to professional. Continue your journey and unlock your fullest potential!
Mastering Pygame is an exciting and engaging adventure. It is a skill that not only sets you off into the world of game development but also helps you unlock your creative expressiveness. Combining technical knowledge with your artistic vision, Pygame allows you to let your imagination run wild and breathe life into your gaming ideas.
At Zenva, we believe in your potential to shape the future of gaming. So what are you waiting for? Start your game programming journey today with our Python Mini-Degree, and let Pygame be your gateway into the vast and wonderful world of game development. We look forward to seeing your creations!
FINAL DAYS: Unlock coding courses in Unity, Unreal, Python, Godot and more.