PyGame でスタート メニューとゲーム オーバー画面を作成する方法

PyGame でスタート メニューとゲーム オーバー画面を作成する方法

PyGame は、Python でプロジェクトを作成するための人気のあるライブラリであり、ゲーム開発用の強力なツール セットを提供します。この記事では、PyGame を使用して簡単なゲームのスタート メニューとゲーム オーバー画面を作成する方法を学習します。​​​​​​

簡単なゲームの作成

スタートメニューやゲームオーバー画面を作る前に、まずは簡単なゲームを作ってみましょう。このゲームでは、矢印キーでキャラクターを操作し、障害物を避けようとします。シンプルにするために、画像を使用しないようにしてください。

開始するには、必要なモジュールをインポートする必要があります。pygameモジュールを使用して、 PyGame の関数にアクセスします。モジュールをインストールするには、pip パッケージ マネージャーを使用できます。

pip install pygame

モジュールを使用する準備ができたので、矢印キーと障害物を使用して左または右に移動できるプレーヤーで簡単なゲームを作成しましょう。障害物にぶつかるとゲームオーバーです。同じコードは次のとおりです。

import pygame
pygame.init()

screen_width = 750
screen_height = 450
screen = pygame.display.set_mode((screen_width, screen_height))

obstacle_x = 400
obstacle_y = 400
obstacle_width = 40
obstacle_height = 40
player_x = 200
player_y = 400
player_width = 20
player_height = 20

while True:

    for event in pygame.event.get():

        if event.type == pygame.QUIT:
            pygame.quit()
            quit()

    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= 5
    if keys[pygame.K_RIGHT]:
        player_x += 5

    if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
        game_over = True

    screen.fill((0, 0, 0))
    pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
    pygame.draw.rect(screen, (0, 255, 0), (player_x, player_y, player_width, player_height))
    pygame.display.update()

上記のコードでは、ゲーム ウィンドウを設定し、ゲーム変数を宣言しました。また、ユーザー入力を処理し、要素を画面に描画しました。

pygame を使った簡単なゲーム

スタートメニューの作成

基本的なゲームができたので、スタート メニューを作成しましょう。これを行うには、ゲーム ステートのグローバル変数を宣言する必要があります。この変数は、スタート メニューがアクティブか、ゲームが実行中かなど、ゲームの現在の状態を追跡します。この変数をゲーム コードの先頭に追加する必要があります。

game_state = "start_menu"

次に、スタート メニューを画面に描画する関数を追加します。PyGame 関数を使用して、画面上にテキスト、ボタン、およびその他の要素を描画できます。

def draw_start_menu():
    screen.fill((0, 0, 0))
    font = pygame.font.SysFont('arial', 40)
    title = font.render('My Game', True, (255, 255, 255))
    start_button = font.render('Start', True, (255, 255, 255))
    screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
    screen.blit(start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
    pygame.display.update()

その後、 draw_start_menu()関数をメイン ゲーム ループに追加できます。

while True:

   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           pygame.quit()
           quit()

   if game_state == "start_menu":
       draw_start_menu()

   if game_state == "game":
       keys = pygame.key.get_pressed()
       # rest of the code

これで、スタート メニューが画面に描画されます。最後のステップは、ユーザー入力の処理です。メイン ゲーム ループに if ステートメントを追加して、ユーザーがスタート ボタンを押したかどうかを確認できます。

if game_state == "start_menu":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        player_x = 200
        player_y = 400
        game_state = "game"
        game_over = False

このコードでは、ユーザーがスタート ボタンを押すとゲームが開始されます。

pygame スタート画面付きのシンプルなゲーム

ゲームオーバー画面の実装

スタートメニューができたので、ゲームオーバー画面を作りましょう。この関数は、最終スコアとゲーム オーバー メッセージを表示する必要があります。

def draw_game_over_screen():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('Game Over', True, (255, 255, 255))
   restart_button = font.render('R - Restart', True, (255, 255, 255))
   quit_button = font.render('Q - Quit', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
   screen.blit(restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
   screen.blit(quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
   pygame.display.update()

その後、この関数をメインのゲーム ループに追加できます。

if game_state == "start_menu":
    draw_start_menu()
if game_state == "game_over":
    draw_game_over_screen()

if game_state == "game":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT]:
        player_x -= 5
    if keys[pygame.K_RIGHT]:
        player_x += 5

if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
    game_over = True
    game_state = "game_over"

最後に、ユーザーの選択を処理するためにユーザー入力を処理する必要があります。メイン ゲーム ループに if ステートメントを追加して、ユーザーが再起動または終了ボタンを押したかどうかを確認できます。

if game_state == "start_menu":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_SPACE]:
        game_state = "game"
       player_x = 200
       player_y = 400
       game_state = "game"
       game_over = False

if game_state == "game_over":
    keys = pygame.key.get_pressed()
    if keys[pygame.K_r]:
        game_state = "start_menu"
    if keys[pygame.K_q]:
        pygame.quit()
        quit()

このコードでは、ユーザーがキーボードの「R」ボタンを押すとゲームが再起動し、ユーザーがキーボードの「Q」ボタンを押すとゲームが終了します。

pygame ゲームオーバー画面付きのシンプルなゲーム

以下は完全なコードです。

import pygame

pygame.init()
screen_width = 750
screen_height = 450
screen = pygame.display.set_mode((screen_width, screen_height))
obstacle_x = 400
obstacle_y = 400
obstacle_width = 40
obstacle_height = 40
player_x = 200
player_y = 400
player_width = 20
player_height = 20
game_state = "start_menu"

def draw_start_menu():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('My Game', True, (255, 255, 255))
   start_button = font.render('Start', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/2))
   screen.blit(start_button, (screen_width/2 - start_button.get_width()/2, screen_height/2 + start_button.get_height()/2))
   pygame.display.update()

def draw_game_over_screen():
   screen.fill((0, 0, 0))
   font = pygame.font.SysFont('arial', 40)
   title = font.render('Game Over', True, (255, 255, 255))
   restart_button = font.render('R - Restart', True, (255, 255, 255))
   quit_button = font.render('Q - Quit', True, (255, 255, 255))
   screen.blit(title, (screen_width/2 - title.get_width()/2, screen_height/2 - title.get_height()/3))
   screen.blit(restart_button, (screen_width/2 - restart_button.get_width()/2, screen_height/1.9 + restart_button.get_height()))
   screen.blit(quit_button, (screen_width/2 - quit_button.get_width()/2, screen_height/2 + quit_button.get_height()/2))
   pygame.display.update()

while True:
   for event in pygame.event.get():
       if event.type == pygame.QUIT:
           pygame.quit()
           quit()
   if game_state == "start_menu":
       draw_start_menu()
       keys = pygame.key.get_pressed()
       if keys[pygame.K_SPACE]:
           player_x = 200
           player_y = 400
           game_state = "game"
           game_over = False
   elif game_state == "game_over":
       draw_game_over_screen()
       keys = pygame.key.get_pressed()
       if keys[pygame.K_r]:
           game_state = "start_menu"
       if keys[pygame.K_q]:
           pygame.quit()
           quit()

   elif game_state == "game":
       keys = pygame.key.get_pressed()
       if keys[pygame.K_LEFT]:
           player_x -= 5
       if keys[pygame.K_RIGHT]:
           player_x += 5

       if player_x + player_width > obstacle_x and player_x < obstacle_x + obstacle_width and player_y + player_height > obstacle_y and player_y < obstacle_y + obstacle_height:
           game_over = True
           game_state = "game_over"

       screen.fill((0, 0, 0))
       pygame.draw.rect(screen, (255, 0, 0), (obstacle_x, obstacle_y, obstacle_width, obstacle_height))
       pygame.draw.rect(screen, (0, 255, 0), (player_x, player_y, player_width, player_height))
       pygame.display.update()

   elif game_over:
       game_state = "game_over"
       game_over = False

コードは、pygameモジュールをインポートして初期化することから始まります。次に、ゲーム ウィンドウを作成し、プレイヤーと障害物の位置、寸法、ゲームの状態など、必要なゲーム変数を宣言します。

このコードでは、2 つの関数draw_start_menu()draw_game_over_screen( ) を定義して、スタート メニューとゲーム オーバー画面を描画します。これらの関数は、PyGame 関数を使用してテキストとボタンを画面に描画します。

メインのゲーム ループは、イベントの処理とゲームの状態のチェックから始まります。ゲームの状態がstart_menuの場合、スタート メニューが画面に描画されます。ゲーム状態がgame_overの場合、ゲームオーバー画面が画面に描画されます。ゲームの状態がそれ以外の場合、ゲームは更新され、プレイヤーと障害物が画面に描画されます。

ゲームは、キーの押下を処理し、プレイヤーと障害物との間の衝突をチェックすることによって更新されます。衝突が発生した場合、ゲームはgame_overフラグをTrueに設定し、ゲームの状態をgame_overに設定します。

ゲームが更新された後、プレイヤーと障害物が画面に描画されます。最後に、コードはgame_overフラグが設定されているかどうかをチェックし、設定されている場合はフラグをリセットし、ゲームの状態をgame_overに設定します。

このプロセスは、ゲーム ウィンドウが閉じられるまで継続的に繰り返されます。

視覚的に魅力的な UI でユーザー エンゲージメントを高める

適切に設計されたユーザー インターフェイス (UI) を使用すると、PyGame ゲームでのユーザー エンゲージメントを大幅に高めることができます。明確で読みやすいフォント、視覚的に魅力的なグラフィック、簡単なナビゲーション、およびユーザー フィードバックはすべて、UI を設計する際に考慮すべき重要な要素です。これらの要素を実装することで、プレイヤーがゲームに興味を持ち、ゲームに没頭できるようにする UI を作成できます。

UI をテストし、プレイヤーからのフィードバックを収集して、エンゲージメントの向上に効果的であることを確認してください。全体として、時間をかけて強力な UI を作成することで、プレイヤーのエクスペリエンスとゲームの楽しさを大幅に向上させることができます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です