Pygame を使ったレーシングゲーム

PythonPythonBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このプロジェクトでは、Pygameライブラリを使って簡単なレーシングゲームを作成する方法を学びます。このゲームには、プレイヤー用の車と複数の敵用の車が登場します。プレイヤー用の車は矢印キーで左右に移動でき、敵用の車は画面を下方向に移動します。ゴールはできるだけ敵用の車との衝突を避けることです。衝突が発生するとゲームオーバー画面が表示され、「R」キーを押すことでゲームを再開できます。

👀 プレビュー

レーシングゲームのプレビュー

🎯 タスク

このプロジェクトで学ぶことは以下の通りです。

  • ゲームウィンドウを設定し、必要なライブラリをインポートする方法
  • 色を定義し、車の画像を読み込む方法
  • プレイヤー用の車を定義する方法
  • 敵用の車を定義する方法
  • ゲームオーバー用の変数とフォントを定義する方法
  • ゲームロジックを実装する方法
  • ゲームオーバー画面を表示する方法
  • ゲームを終了する方法

🏆 成果

このプロジェクトを完了すると、以下のことができるようになります。

  • Pygameライブラリを使ってゲームウィンドウを作成する
  • ゲーム内で画像を読み込んで表示する
  • ゲームオブジェクト間の衝突を処理する
  • 連続したゲームプレイのためのゲームループを実装する
  • ゲームオブジェクトを制御するためのユーザー入力を処理する
  • Pygameのフォントモジュールを使って画面にテキストを表示する

プロジェクトファイルを作成する

  1. racing_game.py という名前の新しいファイルを作成します。
cd ~/project
touch racing_game.py
✨ 解答を確認して練習

ゲームウィンドウを設定し、必要なライブラリをインポートする

import pygame
import random

## Pygameを初期化する
pygame.init()

## ゲームウィンドウを設定する
window_width = 800
window_height = 600
window = pygame.display.set_mode((window_width, window_height))
pygame.display.set_caption("Racing Game")

このステップでは、pygame ライブラリをインポートして初期化します。その後、幅800ピクセル、高さ600ピクセルのゲームウィンドウを設定します。また、ウィンドウのタイトルを「Racing Game」に設定します。

ターミナルで以下のコマンドを実行して pygame ライブラリをインストールします。

sudo pip install pygame
✨ 解答を確認して練習

色を定義し、車の画像を読み込む

## 色を定義する
background_color = (30, 30, 30)
player_car_color = (255, 255, 255)
enemy_car_color = (255, 0, 0)
text_color = (255, 255, 255)

## 車の画像を読み込む
player_car_img = pygame.image.load("player_car.png").convert_alpha()
enemy_car_img = pygame.image.load("enemy_car.png").convert_alpha()

このステップでは、ゲームで使用するいくつかの色を定義します。background_colorplayer_car_colorenemy_car_color、および text_color です。また、pygame.image.load() 関数を使って、プレイヤー用の車と敵用の車の画像を読み込みます。

player_car.pngenemy_car.png の画像は、~/project ディレクトリに含まれています。

✨ 解答を確認して練習

プレイヤー用の車を定義する

## プレイヤー用の車を定義する
player_car_width = player_car_img.get_width()
player_car_height = player_car_img.get_height()
player_car_x = window_width // 2 - player_car_width // 2
player_car_y = window_height - player_car_height - 10
player_car_speed = 5

このステップでは、プレイヤー用の車のプロパティを定義します。player_car_widthplayer_car_height は、プレイヤー用の車の画像の寸法に設定されます。player_car_xplayer_car_y は、画面上のプレイヤー用の車の初期位置を表します。player_car_speed は、プレイヤー用の車が移動できる速度を決定します。

✨ 解答を確認して練習

敵用の車を定義する

## 敵用の車を定義する
enemy_cars = []
num_enemy_cars = 3
enemy_car_width = 80
enemy_car_height = 160
for _ in range(num_enemy_cars):
    enemy_car_x = random.randint(0, window_width - enemy_car_width)
    enemy_car_y = random.randint(-window_height, -enemy_car_height)
    enemy_car_speed = random.randint(2, 5)
    enemy_cars.append({"x": enemy_car_x, "y": enemy_car_y, "speed": enemy_car_speed})

このステップでは、敵用の車のプロパティを定義します。enemy_cars は、敵用の車のオブジェクトを格納するリストです。num_enemy_cars は、ゲーム内の敵用の車の数を決定します。enemy_car_widthenemy_car_height は、敵用の車の画像の寸法を表します。各敵用の車に対してランダムな位置と速度を生成し、enemy_cars リストに追加するためにループを使用します。

✨ 解答を確認して練習

ゲームオーバー用の変数とフォントを定義する

## ゲームオーバー用の変数を定義する
game_over = False
font = pygame.font.Font(None, 50)
game_over_text = font.render("Game Over", True, text_color)
restart_text = font.render("Press R to Restart", True, text_color)

このステップでは、ゲームオーバー画面に関連する変数を定義します。game_over は、ゲームが終了しているかどうかを示すブール型の変数です。font は、サイズ50のPygameのフォントオブジェクトです。フォントを使って「Game Over」のテキストと「Press R to Restart」のテキストをレンダリングし、game_over_textrestart_text の変数に格納します。

✨ 解答を確認して練習

ゲームループ

## ゲームループ
running = True
clock = pygame.time.Clock()

while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_r and game_over:
                game_over = False
                player_car_x = window_width // 2 - player_car_width // 2
                player_car_y = window_height - player_car_height - 10
                for enemy_car in enemy_cars:
                    enemy_car["x"] = random.randint(0, window_width - enemy_car_width)
                    enemy_car["y"] = random.randint(-window_height, -enemy_car_height)

    if not game_over:
        ## ゲームロジックコードはここに書きます...

        ## ウィンドウを更新する
        window.fill(background_color)
        window.blit(player_car_img, (player_car_x, player_car_y))
        for enemy_car in enemy_cars:
            window.blit(enemy_car_img, (enemy_car["x"], enemy_car["y"]))
    else:
        ## ゲームオーバー画面のコードはここに書きます...

    pygame.display.update()
    clock.tick(60)

このステップでは、while ループを使ってゲームループを設定します。running 変数が True の間、ループは実行されます。イベントの種類とキーをチェックすることで、ゲームの終了や再開などのイベントを処理します。ゲームが終了していない場合、if not game_over ブロック内のコードが実行され、これにはゲームロジックと画面上にプレイヤー用の車と敵用の車を描画する処理が含まれます。ゲームが終了している場合、else ブロック内のコードが実行され、ゲームオーバー画面が表示されます。最後に、画面を更新してフレームレートを毎秒60フレームに設定します。

✨ 解答を確認して練習

ゲームロジックコード

if not game_over:
    ## プレイヤー用の車を移動させる
    keys = pygame.key.get_pressed()
    if keys[pygame.K_LEFT] and player_car_x > player_car_speed:
        player_car_x -= player_car_speed
    if (
        keys[pygame.K_RIGHT]
        and player_car_x < window_width - player_car_width - player_car_speed
    ):
        player_car_x += player_car_speed

    ## 敵用の車を移動させる
    for enemy_car in enemy_cars:
        enemy_car["y"] += enemy_car["speed"]
        if enemy_car["y"] > window_height:
            enemy_car["x"] = random.randint(0, window_width - enemy_car_width)
            enemy_car["y"] = random.randint(-window_height, -enemy_car_height)
            enemy_car["speed"] = random.randint(2, 5)

        ## 衝突をチェックする
        if player_car_y < enemy_car["y"] + enemy_car_height:
            if (
                player_car_x < enemy_car["x"] + enemy_car_width
                and player_car_x + player_car_width > enemy_car["x"]
            ):
                game_over = True

このステップでは、ゲームループ内にゲームロジックコードを実装します。ユーザー入力をチェックしてプレイヤー用の車を左右に移動させます。敵用の車の位置を更新し、プレイヤー用の車と敵用の車の間で衝突が発生したかどうかをチェックします。衝突が発生した場合、game_over 変数を True に設定します。

✨ 解答を確認して練習

ゲームオーバー画面のコード

else:
    ## ゲームオーバー画面
    window.fill(background_color)
    game_over_rect = game_over_text.get_rect(
        center=(window_width // 2, window_height // 2 - 50)
    )
    restart_rect = restart_text.get_rect(
        center=(window_width // 2, window_height // 2 + 50)
    )
    window.blit(game_over_text, game_over_rect)
    window.blit(restart_text, restart_rect)

このステップでは、ゲームループ内にゲームオーバー画面のコードを実装します。window.blit() 関数を使って、ゲームオーバーのテキストと再開のテキストを画面に表示します。get_rect()center プロパティを使って、テキストを画面の中央に配置します。

✨ 解答を確認して練習

ゲームを終了する

## ゲームを終了する
pygame.quit()

この最後のステップでは、ゲームループが終了したときにゲームを終了し、Pygameのウィンドウを閉じます。

次に、次のコマンドを使ってゲームを実行できます:

python racing_game.py
ゲームウィンドウが閉じる画面キャプチャ
✨ 解答を確認して練習

まとめ

おめでとうございます!Pygameライブラリを使って、簡単なレーシングゲームを成功裏に作成しました。このゲームには、左右に移動できるプレイヤー用の車と、複数の敵用の車が含まれています。目的は、できるだけ長い間敵用の車との衝突を避けることです。また、このゲームにはゲームオーバー画面があり、「R」キーを押すことでゲームを再開できます。ゲーム開発技術を向上させるために、練習と実験を続けてください。