Home >Backend Development >Python Tutorial >How to Create a Pygame Game with Multiple Levels and a Main Menu?
Pygame level/menu states
Pygame is a popular Python library for creating 2D games. It provides a variety of modules for handling graphics, sound, input, and more.
In this article, we'll discuss how to use Pygame to create games with multiple levels and menus. We'll start by creating a simple game with a single level, and then we'll expand on that to create a game with multiple levels and a main menu.
To create a simple game with a single level, we'll need to create a Pygame window, load some graphics, and create a game loop.
Here's a code snippet that shows how to do this:
import pygame # Initialize the Pygame library pygame.init() # Set the window size SCREEN_WIDTH = 800 SCREEN_HEIGHT = 600 # Create the Pygame window screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT)) # Set the window title pygame.display.set_caption("My Game") # Load the background image background_image = pygame.image.load("background.png").convert() # Create the player sprite player = pygame.sprite.Sprite() player.image = pygame.image.load("player.png").convert() player.rect = player.image.get_rect() player.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) # Create the enemy sprite enemy = pygame.sprite.Sprite() enemy.image = pygame.image.load("enemy.png").convert() enemy.rect = enemy.image.get_rect() enemy.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 100) # Create a group to hold all the sprites all_sprites = pygame.sprite.Group() all_sprites.add(player) all_sprites.add(enemy) # Create a clock to control the game loop clock = pygame.time.Clock() # Run the game loop running = True while running: # Process events for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Update the game state all_sprites.update() # Draw the game画面 screen.blit(background_image, (0, 0)) all_sprites.draw(screen) # Flip the display pygame.display.flip() # Cap the frame rate at 60 FPS clock.tick(60) # Quit the game pygame.quit()
This code creates a Pygame window with a background image and two sprites: a player and an enemy. The game loop runs until the player quits the game, and during each iteration of the loop, the game state is updated, the screen is drawn, and the display is flipped.
To expand the game to include multiple levels and a main menu, we'll need to create a new Scene class. A Scene represents a particular part of the game, such as a level or a menu.
Here's a code snippet that shows how to create a Scene class:
class Scene: def __init__(self): self.next = None def update(self): pass def draw(self, screen): pass def handle_events(self, events): pass
The Scene class has three methods: update, draw, and handle_events. The update method is called each frame to update the game state, the draw method is called each frame to draw the game画面, and the handle_events method is called each frame to handle user input.
We can now create a new Scene for each level and for the main menu. Here's a code snippet that shows how to do this:
class Level1(Scene): def __init__(self): super().__init__() # Create the player sprite self.player = pygame.sprite.Sprite() self.player.image = pygame.image.load("player.png").convert() self.player.rect = self.player.image.get_rect() self.player.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) # Create the enemy sprite self.enemy = pygame.sprite.Sprite() self.enemy.image = pygame.image.load("enemy.png").convert() self.enemy.rect = self.enemy.image.get_rect() self.enemy.rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2 + 100) # Create a group to hold all the sprites self.all_sprites = pygame.sprite.Group() self.all_sprites.add(self.player) self.all_sprites.add(self.enemy) def update(self): # Update the game state self.all_sprites.update() def draw(self, screen): # Draw the game画面 screen.blit(background_image, (0, 0)) self.all_sprites.draw(screen) def handle_events(self, events): # Handle user input for event in events: if event.type == pygame.QUIT: # The user has quit the game pygame.quit() sys.exit() elif event.type == pygame.KEYDOWN: if event.key == pygame.K_LEFT: # The user has pressed the left arrow key self.player.rect.x -= 10 elif event.key == pygame.K_RIGHT: # The user has pressed the right arrow key self.player.rect.x += 10 elif event.key == pygame.K_UP: # The user has pressed the up arrow key self.player.rect.y -= 10 elif event.key == pygame.K_DOWN: # The user has pressed the down arrow key self.player.rect.y += 10 class MainMenu(Scene): def __init__(self): super().__init__() # Create the title text self.title_text = pygame.font.Font(None, 50) self.title_text_image = self.title_text.render("My Game", True, (255, 255, 255)) self.title_text_rect = self.title_text_image.get_rect() self.title_text_rect.center = (SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2) # Create the start button self.start_button = pygame.draw.rect(screen, (0, 255, 0), (SCREEN_WIDTH / 2 - 50, SCREEN_HEIGHT / 2 + 100, 100, 50)) def update(self): pass def draw(self, screen): # Draw the game画面 screen.blit(background_image, (0, 0)) screen.blit(self.title_text_image, self.title_text_rect) pygame.draw.rect(screen, (0, 255, 0), self.start_button) def handle_events(self, events): # Handle user input for event in events: if event.type == pygame.QUIT: # The user has quit the game pygame.quit() sys.exit() elif event.type == pygame.MOUSEBUTTONDOWN: # The user has clicked the start button if self.start_button.collidepoint(event.pos): # Set the next scene to Level1 self.next = Level1()
We can now create a new SceneManager class to manage the different scenes. The SceneManager keeps track of the current scene and switches to the next scene when the current scene is finished.
Here's a code snippet that shows how to create a SceneManager class:
class SceneManager: def __init__(self): self.current_scene = MainMenu() def run(self): # Run the game loop running = True while running: # Process events for event in pygame.event.get(): if event.type == pygame.QUIT: # The user has quit the game running = False # Update the current scene self.current_scene.update() # Draw the current scene self.current_scene.draw(screen) # Flip the display pygame.display.flip() # Check if the current scene is finished if self.current_scene.next is not None:
The above is the detailed content of How to Create a Pygame Game with Multiple Levels and a Main Menu?. For more information, please follow other related articles on the PHP Chinese website!