ホームページ > バックエンド開発 > Python チュートリアル > 複数のレベルとメインメニューを持つ Pygame ゲームを作成するには?

複数のレベルとメインメニューを持つ Pygame ゲームを作成するには?

Susan Sarandon
リリース: 2024-11-28 15:41:14
オリジナル
706 人が閲覧しました

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

Pygame レベル/メニューの状態

Pygame は、2D ゲームを作成するための人気のある Python ライブラリです。グラフィック、サウンド、入力などを処理するためのさまざまなモジュールが提供されます。

この記事では、Pygame を使用して複数のレベルとメニューを持つゲームを作成する方法について説明します。まずは 1 つのレベルを持つ単純なゲームを作成し、次にそれを拡張して複数のレベルとメイン メニューを持つゲームを作成します。

1 つのレベルを持つ単純なゲームの作成

単一レベルの単純なゲームを作成するには、Pygame ウィンドウを作成し、いくつかのグラフィックをロードし、ゲーム ループを作成する必要があります。

コードは次のとおりです。これを行う方法を示すスニペット:

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()
ログイン後にコピー

このコードは、背景画像と 2 つのスプライト (プレイヤーと敵) を含む Pygame ウィンドウを作成します。ゲーム ループは、プレーヤーがゲームを終了するまで実行され、ループの各反復中に、ゲームの状態が更新され、画面が描画され、ディスプレイが反転されます。

複数のレベルとを含むようにゲームを拡張します。メイン メニュー

ゲームを拡張して複数のレベルとメイン メニューを含めるには、新しい Scene クラスを作成する必要があります。シーンは、レベルやメニューなど、ゲームの特定の部分を表します。

シーン クラスの作成方法を示すコード スニペットは次のとおりです。

class Scene:

    def __init__(self):
        self.next = None

    def update(self):
        pass

    def draw(self, screen):
        pass

    def handle_events(self, events):
        pass
ログイン後にコピー

シーン クラスには次のものがあります。 3 つのメソッド: update、draw、handle_events。 update メソッドはゲームの状態を更新するためにフレームごとに呼び出され、draw メソッドはゲーム画面を描画するためにフレームごとに呼び出され、handle_events メソッドはユーザー入力を処理するためにフレームごとに呼び出されます。

これで、各レベルとメインメニューの新しいシーン。これを行う方法を示すコード スニペットを次に示します。

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()
ログイン後にコピー

これで、さまざまなシーンを管理するための新しい SceneManager クラスを作成できるようになりました。 SceneManager は現在のシーンを追跡し、現在のシーンが終了すると次のシーンに切り替えます。

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:
ログイン後にコピー

以上が複数のレベルとメインメニューを持つ Pygame ゲームを作成するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート