はじめに
このプロジェクトでは、Python と Pygame ライブラリを使ってポングゲームを作成する方法を学びます。ポングは、2 人用のクラシックなアーケードゲームで、プレイヤーがパドルを操作してボールを互いに打ち越すものです。
このプロジェクトを完了するには、以下の手順に従います。まず、プロジェクトファイルを作成してゲームウィンドウをセットアップします。次に、色を定義してパドルとボールをセットアップします。最後に、パドルとボールを動かし、衝突を処理し、ゲーム要素を描画します。
👀 プレビュー

🎯 タスク
このプロジェクトでは、以下のことを学びます。
- プロジェクトファイルを作成する方法
- ゲームウィンドウをセットアップする方法
- パドルとボールをセットアップする方法
- ゲーム変数をセットアップする方法
- ゲームループをセットアップする方法
- パドルを動かす方法
- ボールを動かす方法
- ボールの衝突を処理する方法
- スコアを更新してボールをリセットする方法
- パワーアップの衝突と移動を処理する方法
- ゲーム要素を描画する方法
- スコアを描画する方法
- 表示を更新する方法
- 1 秒間のフレーム数(FPS)を設定する方法
- ゲームを終了する方法
🏆 成果
このプロジェクトを完了すると、以下のことができるようになります。
- Pygame ライブラリを使ってゲームウィンドウを作成する
- パドルやボールなどのゲームオブジェクトをセットアップして動かす
- ゲームオブジェクト間の衝突を処理する
- ゲームスコアを更新して表示する
- ゲームの 1 秒間のフレーム数(FPS)を設定する
- ゲームを適切に終了する
プロジェクトファイルを作成する
好きなコードエディタまたは 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()
パドルとボールを設定する
パドルのプロパティ(幅、高さ、速度、色など)を定義します。
## Set up the paddles
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
)
ボールのプロパティ(幅、高さ、速度、色など)をセットアップします。
## Set up the ball
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))
パワーアップのプロパティ(幅、高さ、速度、色など)をセットアップします。
## Set up the power-ups
POWERUP_WIDTH = 10
POWERUP_HEIGHT = 10
POWERUP_SPEED = 2
POWERUP_COLOR = ORANGE
powerup = pygame.Rect(
WIDTH / 2 - POWERUP_WIDTH / 2,
HEIGHT / 2 - POWERUP_HEIGHT / 2,
POWERUP_WIDTH,
POWERUP_HEIGHT,
)
powerup_speed_x = POWERUP_SPEED * random.choice((1, -1))
powerup_speed_y = POWERUP_SPEED * random.choice((1, -1))
powerup_active = False
ゲーム変数を設定する
プレイヤーのスコアを追跡するための変数をセットアップし、ゲーム用のフォントオブジェクトを作成し、スコア表示用の色を定義します。
## ゲーム変数をセットアップする
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 キーを使ってポンゲームを遊ぶことができます。

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



