Keadaan tahap/menu Pygame
Pygame ialah perpustakaan Python yang popular untuk mencipta permainan 2D. Ia menyediakan pelbagai modul untuk mengendalikan grafik, bunyi, input dan banyak lagi.
Dalam artikel ini, kami akan membincangkan cara menggunakan Pygame untuk mencipta permainan dengan pelbagai peringkat dan menu. Kami akan bermula dengan mencipta permainan mudah dengan satu tahap, dan kemudian kami akan mengembangkannya untuk mencipta permainan dengan berbilang peringkat dan menu utama.
Untuk mencipta permainan mudah dengan satu tahap, kami perlu mencipta tetingkap Pygame, memuatkan beberapa grafik dan membuat gelung permainan.
Berikut ialah kod coretan yang menunjukkan cara untuk melakukan ini:
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()
Kod ini mencipta tetingkap Pygame dengan imej latar belakang dan dua sprite: pemain dan musuh. Gelung permainan berjalan sehingga pemain berhenti dari permainan dan semasa setiap lelaran gelung, keadaan permainan dikemas kini, skrin dilukis dan paparan dibalikkan.
Untuk mengembangkan permainan untuk menyertakan berbilang peringkat dan menu utama, kami perlu mencipta kelas Scene baharu. Adegan mewakili bahagian tertentu permainan, seperti tahap atau menu.
Berikut ialah coretan kod yang menunjukkan cara membuat kelas Adegan:
class Scene: def __init__(self): self.next = None def update(self): pass def draw(self, screen): pass def handle_events(self, events): pass
Kelas Adegan mempunyai tiga kaedah: kemas kini, lukis dan handle_events. Kaedah kemas kini dipanggil setiap bingkai untuk mengemas kini keadaan permainan, kaedah cabutan dipanggil setiap bingkai untuk melukis permainan画面, dan kaedah handle_events dipanggil setiap bingkai untuk mengendalikan input pengguna.
Kita kini boleh mencipta Adegan baharu untuk setiap peringkat dan untuk menu utama. Berikut ialah coretan kod yang menunjukkan cara untuk melakukannya:
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()
Kini kami boleh mencipta kelas SceneManager baharu untuk mengurus adegan yang berbeza. SceneManager menjejaki adegan semasa dan beralih ke adegan seterusnya apabila adegan semasa selesai.
Berikut ialah coretan kod yang menunjukkan cara mencipta kelas SceneManager:
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:
Atas ialah kandungan terperinci Bagaimana untuk Mencipta Permainan Pygame dengan Pelbagai Tahap dan Menu Utama?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!