Heim >Backend-Entwicklung >Python-Tutorial >Wie erstelle ich ein Pygame-Spiel mit mehreren Levels und einem Hauptmenü?
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.
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.
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!