Heim >Backend-Entwicklung >Python-Tutorial >Wie erstelle ich ein Pygame-Spiel mit mehreren Levels und einem Hauptmenü?

Wie erstelle ich ein Pygame-Spiel mit mehreren Levels und einem Hauptmenü?

Susan Sarandon
Susan SarandonOriginal
2024-11-28 15:41:14693Durchsuche

How to Create a Pygame Game with Multiple Levels and a Main Menu?

Pygame-Level/Menüzustände

Pygame ist eine beliebte Python-Bibliothek zum Erstellen von 2D-Spielen. Es bietet eine Vielzahl von Modulen für die Handhabung von Grafiken, Sound, Eingaben und mehr.

In diesem Artikel besprechen wir, wie man mit Pygame Spiele mit mehreren Ebenen und Menüs erstellt. Wir beginnen mit der Erstellung eines einfachen Spiels mit einem einzigen Level und erweitern dies dann, um ein Spiel mit mehreren Levels und einem Hauptmenü zu erstellen.

Ein einfaches Spiel mit einem einzigen Level erstellen

Um ein einfaches Spiel mit einem einzigen Level zu erstellen, müssen wir ein Pygame-Fenster erstellen, einige Grafiken laden und eine Spielschleife erstellen.

Hier ist ein Code Ausschnitt, der zeigt, wie das geht:

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()

Dieser Code erstellt ein Pygame-Fenster mit einem Hintergrundbild und zwei Sprites: einem Spieler und einem Feind. Die Spielschleife läuft, bis der Spieler das Spiel verlässt, und während jeder Wiederholung der Schleife wird der Spielstatus aktualisiert, der Bildschirm gezeichnet und die Anzeige umgedreht.

Erweitern des Spiels um mehrere Level und ein Hauptmenü

Um das Spiel um mehrere Level und ein Hauptmenü zu erweitern, müssen wir eine neue Scene-Klasse erstellen. Eine Szene stellt einen bestimmten Teil des Spiels dar, beispielsweise ein Level oder ein Menü.

Hier ist ein Codeausschnitt, der zeigt, wie eine Scene-Klasse erstellt wird:

class Scene:

    def __init__(self):
        self.next = None

    def update(self):
        pass

    def draw(self, screen):
        pass

    def handle_events(self, events):
        pass

Die Scene-Klasse hat Drei Methoden: Update, Draw und handle_events. Die Update-Methode wird bei jedem Frame aufgerufen, um den Spielstatus zu aktualisieren, die Draw-Methode wird bei jedem Frame aufgerufen, um das Spiel zu zeichnen, und die Methode handle_events wird bei jedem Frame aufgerufen, um Benutzereingaben zu verarbeiten.

Wir können jetzt eine erstellen Neue Szene für jede Ebene und für das Hauptmenü. Hier ist ein Codeausschnitt, der zeigt, wie das geht:

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()

Wir können jetzt eine neue SceneManager-Klasse erstellen, um die verschiedenen Szenen zu verwalten. Der SceneManager verfolgt die aktuelle Szene und wechselt zur nächsten Szene, wenn die aktuelle Szene fertig ist.

Hier ist ein Codeausschnitt, der zeigt, wie eine SceneManager-Klasse erstellt wird:

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:

Das obige ist der detaillierte Inhalt vonWie erstelle ich ein Pygame-Spiel mit mehreren Levels und einem Hauptmenü?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn