Python と Pygame を使った古典的なポンゲーム

PythonPythonIntermediate
オンラインで実践に進む

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

はじめに

このプロジェクトでは、Python と Pygame ライブラリを使ってポングゲームを作成する方法を学びます。ポングは、2 人用のクラシックなアーケードゲームで、プレイヤーがパドルを操作してボールを互いに打ち越すものです。

このプロジェクトを完了するには、以下の手順に従います。まず、プロジェクトファイルを作成してゲームウィンドウをセットアップします。次に、色を定義してパドルとボールをセットアップします。最後に、パドルとボールを動かし、衝突を処理し、ゲーム要素を描画します。

👀 プレビュー

ポングゲームのプレビュー画面

🎯 タスク

このプロジェクトでは、以下のことを学びます。

  • プロジェクトファイルを作成する方法
  • ゲームウィンドウをセットアップする方法
  • パドルとボールをセットアップする方法
  • ゲーム変数をセットアップする方法
  • ゲームループをセットアップする方法
  • パドルを動かす方法
  • ボールを動かす方法
  • ボールの衝突を処理する方法
  • スコアを更新してボールをリセットする方法
  • パワーアップの衝突と移動を処理する方法
  • ゲーム要素を描画する方法
  • スコアを描画する方法
  • 表示を更新する方法
  • 1 秒間のフレーム数(FPS)を設定する方法
  • ゲームを終了する方法

🏆 成果

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

  • Pygame ライブラリを使ってゲームウィンドウを作成する
  • パドルやボールなどのゲームオブジェクトをセットアップして動かす
  • ゲームオブジェクト間の衝突を処理する
  • ゲームスコアを更新して表示する
  • ゲームの 1 秒間のフレーム数(FPS)を設定する
  • ゲームを適切に終了する
これは Guided Lab です。学習と実践を支援するためのステップバイステップの指示を提供します。各ステップを完了し、実践的な経験を積むために、指示に注意深く従ってください。過去のデータによると、この 中級 レベルの実験の完了率は 65%です。学習者から 100% の好評価を得ています。

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

好きなコードエディタまたは IDE で、pong_game.pyという名前のファイルを作成します。これがポングゲームのコードを記述するメインファイルになります。

cd ~/project
touch pong_game.py
sudo pip install pygame

ゲームウィンドウをセットアップする

pong_game.pyファイルの中で、コードの最初に必要なライブラリをインポートします。

import pygame
import random

次に、pygame.init()を呼び出して Pygame を初期化します。

## 初期化
pygame.init()

次に、ゲームウィンドウの幅、高さ、1 秒間のフレーム数(FPS)を定義してゲームウィンドウをセットアップします。

## ゲームウィンドウをセットアップする
WIDTH = 800
HEIGHT = 400
FPS = 60

ゲームで使用する色を定義します。

## 色を定義する
BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
ORANGE = (255, 165, 0)
BACKGROUND_COLOR = (50, 50, 50)

ゲームウィンドウを作成し、ウィンドウのタイトルを設定し、フレームレートを制御するためのクロックオブジェクトを作成します。

## ゲームウィンドウをセットアップする
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("ポングゲーム")
clock = pygame.time.Clock()
✨ 解答を確認して練習

パドルとボールをセットアップする

パドルの幅、高さ、速度、色などのプロパティを定義します。

## パドルをセットアップする
PADDLE_WIDTH = 10
PADDLE_HEIGHT = 60
PADDLE_SPEED = 5
PADDLE_COLOR = WHITE

pygame.Rect()コンストラクタを使って 2 つのパドルオブジェクトを作成し、ゲームウィンドウの各辺の中央に配置します。

paddle1 = pygame.Rect(0, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT)
paddle2 = pygame.Rect(
    WIDTH - PADDLE_WIDTH, HEIGHT / 2 - PADDLE_HEIGHT / 2, PADDLE_WIDTH, PADDLE_HEIGHT
)

ボールの幅、高さ、速度、色などのプロパティをセットアップします。

## ボールをセットアップする
BALL_WIDTH = 10
BALL_HEIGHT = 10
BALL_SPEED_X = 3
BALL_SPEED_Y = 3
BALL_COLOR = WHITE

pygame.Rect()コンストラクタを使ってボールオブジェクトを作成し、ゲームウィンドウの中央に配置します。

ball = pygame.Rect(
    WIDTH / 2 - BALL_WIDTH / 2, HEIGHT / 2 - BALL_HEIGHT / 2, BALL_WIDTH, BALL_HEIGHT
)

ボールの初期速度を x 方向と y 方向でランダムに設定します。

ball_speed_x = BALL_SPEED_X * random.choice((1, -1))
ball_speed_y = BALL_SPEED_Y * random.choice((1, -1))
✨ 解答を確認して練習

ゲーム変数をセットアップする

プレイヤーのスコアを追跡するための変数をセットアップし、ゲーム用のフォントオブジェクトを作成し、スコア表示用の色を定義します。

## ゲーム変数をセットアップする
score1 = 0
score2 = 0
game_font = pygame.font.SysFont(None, 48)
SCORE_COLOR = WHITE
✨ 解答を確認して練習

ゲームループをセットアップする

ゲームループを開始するためのブール型変数runningを作成し、Trueに設定します。

## ゲームループをセットアップする
running = True
while running:

ゲームループ内で、発生したイベントを反復処理してイベントを処理します。

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
✨ 解答を確認して練習

パドルを移動させる

ゲームループ内で、キーボード入力をチェックしてパドルを移動させます。

    ## パドルを移動させる
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w] and paddle1.y > 0:
        paddle1.y -= PADDLE_SPEED
    if keys[pygame.K_s] and paddle1.y < HEIGHT - PADDLE_HEIGHT:
        paddle1.y += PADDLE_SPEED
    if keys[pygame.K_UP] and paddle2.y > 0:
        paddle2.y -= PADDLE_SPEED
    if keys[pygame.K_DOWN] and paddle2.y < HEIGHT - PADDLE_HEIGHT:
        paddle2.y += PADDLE_SPEED
✨ 解答を確認して練習

ボールを移動させる

ゲームループ内で、ボールの位置を更新します。

    ## ボールを移動させる
    ball.x += ball_speed_x
    ball.y += ball_speed_y
✨ 解答を確認して練習

ボールの衝突を処理する

ゲームループ内で、ボールとパドルおよび壁との衝突を処理します。

    ## ボールとパドルの衝突
    if ball.colliderect(paddle1) or ball.colliderect(paddle2):
        ball_speed_x *= -1

    ## ボールと壁の衝突
    if ball.y > HEIGHT - BALL_HEIGHT or ball.y < 0:
        ball_speed_y *= -1
✨ 解答を確認して練習

スコアを更新してボールをリセットする

ゲームループ内で、ボールがパドルを超えたときにスコアを更新してボールをリセットします。

    ## スコアを増やしてボールをリセットする
    if ball.x < 0:
        score2 += 1
        ball.center = (WIDTH / 2, HEIGHT / 2)
        ball_speed_x *= random.choice((1, -1))
        ball_speed_y *= random.choice((1, -1))
    if ball.x > WIDTH:
        score1 += 1
        ball.center = (WIDTH / 2, HEIGHT / 2)
        ball_speed_x *= random.choice((1, -1))
        ball_speed_y *= random.choice((1, -1))
✨ 解答を確認して練習

パワーアップの衝突と移動を処理する

ゲームループ内で、パワーアップとパドルの衝突を処理して、パワーアップを移動させます。

    ## パワーアップとパドルの衝突
    if powerup.colliderect(paddle1) or powerup.colliderect(paddle2):
        powerup_active = True
        powerup.x = WIDTH / 2 - POWERUP_WIDTH / 2
        powerup.y = HEIGHT / 2 - POWERUP_HEIGHT / 2

    ## パワーアップの移動
    if powerup_active:
        powerup.x += powerup_speed_x
        powerup.y += powerup_speed_y

        if powerup.x > WIDTH - POWERUP_WIDTH or powerup.x < 0:
            powerup_speed_x *= -1
        if powerup.y > HEIGHT - POWERUP_HEIGHT or powerup.y < 0:
            powerup_speed_y *= -1
✨ 解答を確認して練習

ゲーム要素を描画する

ゲームループ内で、ゲームウィンドウにパドル、ボール、パワーアップ、およびスコアを描画します。

    ## ゲーム要素を描画する
    screen.fill(BACKGROUND_COLOR)
    pygame.draw.rect(screen, PADDLE_COLOR, paddle1)
    pygame.draw.rect(screen, PADDLE_COLOR, paddle2)
    pygame.draw.ellipse(screen, BALL_COLOR, ball)
    pygame.draw.rect(screen, POWERUP_COLOR, powerup)
✨ 解答を確認して練習

スコアを描画する

ゲームループ内で、ゲームウィンドウの上部中央にスコアを描画します。

    ## スコアを描画する
    score_text = game_font.render(f"{score1} : {score2}", True, SCORE_COLOR)
    screen.blit(score_text, (WIDTH / 2 - score_text.get_width() / 2, 10))
✨ 解答を確認して練習

ディスプレイを更新する

ゲームループ内で、変更を表示するためにディスプレイを更新します。

    ## ディスプレイを更新する
    pygame.display.flip()
✨ 解答を確認して練習

FPS を設定する

ゲームループ内で、ゲームの速度を制御するためにフレームレートを設定します。

    ## FPS を設定する
    clock.tick(FPS)
✨ 解答を確認して練習

ゲームを終了する

ゲームループの後、ゲームが終了したときに Pygame を終了するために、次の行を追加します。

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

デスクトップに切り替え、次のコマンドを使用してプロジェクトを実行します。

python pong_game.py

今、キーボードの矢印キーと W および S キーを使ってポンゲームを遊ぶことができます。

Pong game screenshot
✨ 解答を確認して練習

まとめ

おめでとうございます!Python と Pygame を使ってポンゲームを作成するステップバイステップのプロジェクトを完了しました。ゲームウィンドウを設定し、パドルとボールのプロパティを定義し、ゲームイベントを処理し、パドルとボールを動かし、衝突を処理し、ゲーム要素を描画する方法を学びました。ゲームに独自の機能を追加するために、さまざまな変更を試してみて、楽しんで遊んでください!