【Pygame】セットアップ手順とゲーム製作で役立つモジュール一覧(基礎から応用まで)
はじめに
PygameはPythonで2Dゲームを開発するためのライブラリです。
ゲームを構築するための豊富な機能が用意されており、Python初心者からゲーム開発者まで広く利用されています。
私も実際にPygameで自作ゲーム開発をしてみたところ、シューティングゲームやパズルゲームなど様々なゲームを簡単につくることができました✨🎮
まさに、開発初心者の方や自作ゲーム開発を始めるのにうってつけのライブラリです!
そこで、今後のためにもよく使われるPygameのモジュールや関数を整理したいと思い、備忘録を作成しました。
以下に、基礎から応用までPygameのモジュールとその使い方を具体例とともにわかりやすくご紹介します。
基礎
1:Pygameのインストール
PygameライブラリをPCにインストールします。
一例として、コマンドでインストールする方法をご紹介します。
<手順>
コマンドプロンプトで以下のコマンドを実行しインストールします。
pip install pygame
実行後、Successfully installed pygame -version ~と表示されればOKです。
試しに、サンプル ゲームを実行してみましょう!
コマンドプロンプトで以下のコマンドを実行します。
python -m pygame.examples.aliens
問題がなければ、以下のようなゲームのウィンドウが開きます。
2: 基本的なウィンドウの作成
pygame.init()
でPygameを初期化し、pygame.display
でゲームウィンドウの作成と管理を行います。
関数 | 説明 |
---|---|
pygame.display.set_mode(size) | ウィンドウの作成。 |
pygame.display.set_caption(title) | ウィンドウタイトルの設定。 |
pygame.display.flip() | 画面全体を更新。 |
▼関連ドキュメント
基本のコード構造
import pygame
import sys
# 初期化
pygame.init()
# ウィンドウの作成
screen = pygame.display.set_mode((800, 600)) # サイズを指定
pygame.display.set_caption("Pygame 基礎")
# 色の定義
white = (255, 255, 255)
# メインループ
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill(white) # 背景色を塗る
pygame.display.flip() # 画面を更新
pygame.quit()
sys.exit()
▼実行結果
3: キーボードやマウスの入力の処理
pygame.event
でイベント(入力)を管理します。
Pygame の「イベント」は、ユーザーがマウスをクリックしたり、キーボードのボタンを押したりするなど、特定のアクションを実行したときに発生します。
pygame.event.get()
でイベントを取得し、キーボードやマウスの入力を処理します。
イベントタイプ(例: QUIT, KEYDOWN, MOUSEBUTTONDOWN)に応じた処理を記述します。
▼基本コードから抜粋
# メインループ
running = True
while running:
for event in pygame.event.get(): #イベントを取得
if event.type == pygame.QUIT:
running = False
▼関連ドキュメント
4: 図形の描写
pygame.draw
モジュールを使って、直線や円など図形を描画します。
プレイヤーや敵の描写に役立ちます。
関数 | 説明 |
---|---|
pygame.draw.rect(screen, color, rect) | 長方形 |
pygame.draw.circle(screen, color, center, radius) | 円 |
※他にも線や多角形の描画が可能です。
▼関連ドキュメント
5: キーボード入力の処理
pygame.key
でキー入力を検出し、キャラクターの動きを制御します。
pygame.key.get_pressed()
では現在押されているキーの状態をチェックします。
また、Pygameには、キーボードキーに対応する定数が用意されています。
代表的なものを以下のとおりです。
矢印キー
関数 | 説明 |
---|---|
pygame.K_UP | 上矢印 |
pygame.K_DOWN | 下矢印 |
pygame.K_LEFT | 左矢印 |
pygame.K_RIGHT | 右矢印 |
数字キー
関数 | 説明 |
---|---|
pygame.K_0 ~ pygame.K_9 | キー「0」~「9」 |
特殊キー
関数 | 説明 |
---|---|
pygame.K_SPACE | スペースキー |
pygame.K_RETURN | Enterキー |
pygame.K_ESCAPE | Escキー |
pygame.K_TAB | Tabキー |
pygame.K_BACKSPACE | Backspaceキー |
▼関連ドキュメント
サンプルコード ~シューティングゲーム~
サンプルコード
import pygame
import random
# Pygameの初期化
pygame.init()
# 画面サイズと基本設定
WIDTH, HEIGHT = 800, 600
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("シューティングゲーム")
# 色の設定
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
# プレイヤー設定
player_size = 50
player_x = WIDTH // 2
player_y = HEIGHT - 2 * player_size
player_speed = 5
# 敵設定
enemy_size = 50
enemy_speed = 5
enemies = []
# 弾の設定
bullet_size = 10
bullet_speed = 10
bullets = []
# ゲームのループを制御する変数
running = True
clock = pygame.time.Clock()
# 敵を生成する関数
def create_enemy():
x = random.randint(0, WIDTH - enemy_size)
y = 0
enemies.append(pygame.Rect(x, y, enemy_size, enemy_size))
# メインループ
while running:
screen.fill(BLACK)
# イベント処理
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
# スペースキーで弾を発射
bullet = pygame.Rect(player_x + player_size // 2 - bullet_size // 2, player_y, bullet_size, bullet_size)
bullets.append(bullet)
# プレイヤーの移動
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT] and player_x > 0: # 左矢印を押下すると左へ移動
player_x -= player_speed
if keys[pygame.K_RIGHT] and player_x < WIDTH - player_size: # 右矢印を押下すると右へ移動
player_x += player_speed
# 敵の生成
if random.randint(1, 30) == 1: # 一定確率で敵を生成
create_enemy()
# 敵の移動
for enemy in enemies[:]:
enemy.y += enemy_speed
if enemy.y > HEIGHT: # 画面下に到達したら削除
enemies.remove(enemy)
# 弾の移動
for bullet in bullets[:]:
bullet.y -= bullet_speed
if bullet.y < 0: # 画面上に到達したら削除
bullets.remove(bullet)
# 衝突判定(弾と敵)
for bullet in bullets[:]:
for enemy in enemies[:]:
if bullet.colliderect(enemy):
bullets.remove(bullet)
enemies.remove(enemy)
break
# 図形の描画
player = pygame.Rect(player_x, player_y, player_size, player_size)
pygame.draw.rect(screen, GREEN, player)
for enemy in enemies:
pygame.draw.rect(screen, RED, enemy)
for bullet in bullets:
pygame.draw.rect(screen, WHITE, bullet)
# 画面更新
pygame.display.flip()
clock.tick(30)
# ゲーム終了
pygame.quit()
▼実行結果
応用
6: サウンド再生と画像描写
-
pygame.image
で画像をロードして描画します。
関数 | 説明 |
---|---|
pygame.image.load(file) | 画像を読み込み。 |
screen.blit(image, (x, y)) | 指定座標に画像を描画。 |
-
pygame.mixer
で音声をロードして再生します。
関数 | 説明 |
---|---|
pygame.mixer.Sound(file) | 効果音のロード。 |
pygame.mixer.Sound.play() | 効果音の再生。 |
▼関連ドキュメント
7: 衝突検出
colliderect
は、PygameのRectオブジェクトに組み込まれた衝突判定メソッドです。
これを使うと、四角形同士の衝突を簡単に検出することができます。
図形の一部が重なっている場合は true を返します。
▼シューティングゲームのサンプルコードから抜粋
# 衝突判定(弾と敵)
for bullet in bullets[:]:
for enemy in enemies[:]:
if bullet.colliderect(enemy):
bullets.remove(bullet)
enemies.remove(enemy)
break
▼関連ドキュメント
8: 時間処理
pygame.time
を使うことで、ゲームのフレームレートの管理や時間経過の計測ができます。
- フレームレート(FPS)を制御するためには
pygame.time.Clock
を使います。
各フレームの間隔を調整することで、ゲームが一定の速度で動作します。
▼サンプルコード
clock = pygame.time.Clock()
clock.tick(fps)
上記の例では、フレームレートをfpsに制限します。
例えば、clock.tick(60)とすると、ゲームが60FPSで動作します。
- ゲーム内の経過時間を測るには、
pygame.time.get_ticks()
関数を使用します。
pygame.time.get_ticks()
はPygameが初期化されてから経過した時間をミリ秒単位で返します。
ゲームのタイマーやイベントのスケジュールに役立ちます。
▼サンプルコード
start_time = pygame.time.get_ticks() # ゲーム開始時の時間
while running:
elapsed_time = pygame.time.get_ticks() - start_time # 経過時間計算
print(f"経過時間: {elapsed_time}ms")
▼関連ドキュメント
まとめ
Pygameのゲーム開発でよく使われるモジュールを基本から応用までまとめてみましました。
また気づきがあれば随時アップデートしていこうと思います!
これらの知識を組み合わせることで、面白いゲームを作成することができます。
Pygameのお手軽さと機能性を活かして、自作ゲーム開発に挑戦してみてはいかがでしょうか。
最後まで読んでくださりありがとうございました✨
少しでも参考になる情報となっていれば幸いです。
また、改善点やご意見などあればコメントお願いいたします!
関連記事
Pygameでゲームを作る手順については過去の記事でご紹介しています!
今回紹介したモジュールを使って作成しています。
▼シューティングゲーム
▼上から降ってくるアイテムを落とさないようにしつつハイスコアを狙うキャッチゲーム
▼時間内に敵から逃げ切るサバイバルゲーム
参考サイト
Discussion