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()
上記のコードでは、ゲーム ウィンドウを設定し、ゲーム変数を宣言しました。また、ユーザー入力を処理し、要素を画面に描画しました。
スタートメニューの作成
基本的なゲームができたので、スタート メニューを作成しましょう。これを行うには、ゲーム ステートのグローバル変数を宣言する必要があります。この変数は、スタート メニューがアクティブか、ゲームが実行中かなど、ゲームの現在の状態を追跡します。この変数をゲーム コードの先頭に追加する必要があります。
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
このコードでは、ユーザーがスタート ボタンを押すとゲームが開始されます。
ゲームオーバー画面の実装
スタートメニューができたので、ゲームオーバー画面を作りましょう。この関数は、最終スコアとゲーム オーバー メッセージを表示する必要があります。
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」ボタンを押すとゲームが終了します。
以下は完全なコードです。
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 を作成することで、プレイヤーのエクスペリエンスとゲームの楽しさを大幅に向上させることができます。
コメントを残す