PyGame の基本概要

PyGame(パイゲーム)は、Python でゲームを作るためのライブラリです。以下のポイントを押さえると、全体像がわかります。


目次

🔷 PyGame の基本概要

● 目的

PyGame は、2Dゲームや簡単なインタラクティブアプリケーションの開発に向いており、画像、音声、入力処理などを簡単に扱えるようにした Python ライブラリです。

● 主な機能

  • 画面描画(画像、図形)
  • 音楽・効果音の再生
  • キーボード・マウス入力の処理
  • ゲームループの構築
  • アニメーション制御
  • 衝突判定(コリジョン)

🔷 PyGame の構成要素(主なモジュール)

機能モジュール説明
画面描画pygame.displayウィンドウや画面の初期化・更新
画像処理pygame.image画像の読み込みと描画
図形の描画pygame.draw円・線・四角などの図形を描く
サウンド処理pygame.mixer効果音・音楽の再生
入力処理pygame.key, pygame.mouseキーやマウスイベントの取得
時間管理pygame.time.Clockフレームレート制御やタイマー
イベント管理pygame.eventゲーム内のイベント処理

🔷 最小構成サンプルコード

import pygame
import sys

# 初期化
pygame.init()

# 画面作成
screen = pygame.display.set_mode((640, 480))
pygame.display.set_caption("PyGame サンプル")

# 色の定義
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)

# メインループ
running = True
while running:
    screen.fill(WHITE)  # 背景塗りつぶし

    # 四角を描く
    pygame.draw.rect(screen, BLUE, pygame.Rect(100, 100, 150, 100))

    # イベント処理
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    # 表示更新
    pygame.display.flip()

# 終了処理
pygame.quit()
sys.exit()

🔷 PyGame の特徴と利点

特徴内容
✅ 学習コストが低いPython の基本がわかればすぐ始められる
✅ シンプルなAPI関数の呼び出しだけで多くの処理ができる
✅ 教育用途に最適プログラミングの導入教材として人気
✅ クロスプラットフォームWindows / macOS / Linux に対応

🔷 PyGame で作れるものの例

  • ブロック崩し
  • シューティングゲーム
  • スクロールアクション
  • シンプルな RPG やパズルゲーム
  • 教育用のシミュレーションや可視化ツール

🔷 まとめ

用途特徴
2Dゲームの開発簡単・軽量で始めやすい
教育・学習用途プログラミングの導入に最適
Pythonで完結C/C++の知識不要で環境構築も簡単

あなたのPyGameコードを、エントリーポイント if __name__ == "__main__" から main() 関数を呼び出す構造にリファクタリングする例を以下に示します。


✅ 改良版:main() 関数を使った構造

# pip install pygame
# -*- coding: utf-8 -*-

import pygame
import sys

def run_window():
    pygame.init()  # Pygameの初期化

    screen = pygame.display.set_mode((640, 480))  # ウィンドウのサイズを設定
    pygame.display.set_caption("PyGame サンプル")  # ウィンドウのタイトルを設定

    WHITE = (255, 255, 255)  # 白色
    BLUE = (0, 0, 255)       # 青色

    running = True
    while running:  # メインループ
        screen.fill(WHITE)  # 背景塗りつぶし

        pygame.draw.rect(screen, BLUE, pygame.Rect(100, 100, 150, 100))  # 四角を描く

        for event in pygame.event.get():  # イベント処理
            if event.type == pygame.QUIT:
                running = False

        pygame.display.flip()  # 表示更新

    pygame.quit()  # 終了処理
    sys.exit()

def main():
    print("PyGame アプリケーション開始")
    run_window()  # ゲームウィンドウ表示

if __name__ == "__main__":
    main()

💡構成のポイント

関数名役割
main()エントリーポイント、アプリの起動を管理
run_window()PyGame ウィンドウの表示とメインループ処理

run_window() 関数をクラスにリファクタリングすることで、より構造的で拡張しやすいコードになります。以下に GameWindow というクラスを作成し、Pygame ウィンドウの表示・イベント処理・描画処理をクラス内に整理した例を示します。


✅ クラス化した PyGame 実装(GameWindow クラス)

# pip install pygame
# -*- coding: utf-8 -*-

import pygame
import sys

class GameWindow:
    def __init__(self, width=640, height=480):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption("PyGame クラス版サンプル")

        # 色定義
        self.WHITE = (255, 255, 255)
        self.BLUE = (0, 0, 255)

        self.running = True

    def run(self):
        while self.running:
            self.handle_events()
            self.update()
            self.render()
        self.cleanup()

    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False

    def update(self):
        # 今後、ゲームの状態更新ロジックを追加できる場所
        pass

    def render(self):
        self.screen.fill(self.WHITE)
        pygame.draw.rect(self.screen, self.BLUE, pygame.Rect(100, 100, 150, 100))
        pygame.display.flip()

    def cleanup(self):
        pygame.quit()
        sys.exit()

def main():
    print("PyGame クラスベースアプリを起動")
    game = GameWindow()
    game.run()

if __name__ == "__main__":
    main()

🔍 クラス設計のポイント

メソッド役割
__init__初期化処理(画面サイズ・色・状態など)
runメインループの入口
handle_eventsキー入力・マウスなどのイベント処理
updateゲームロジック・状態更新(拡張用)
render描画処理
cleanup終了処理(リソース解放など)

main() 関数をクラス化する場合、アプリケーション全体を管理する「アプリケーションクラス」を作成します。
たとえば App クラスを定義し、その中で GameWindow を使ってゲームを実行するように構成できます。


main() 相当をクラス化:App クラスを導入

以下は、App クラスを追加し、全体の流れを整理したコードです。

# pip install pygame
# -*- coding: utf-8 -*-

import pygame
import sys

class GameWindow:
    def __init__(self, width=640, height=480):
        pygame.init()
        self.width = width
        self.height = height
        self.screen = pygame.display.set_mode((self.width, self.height))
        pygame.display.set_caption("PyGame クラス版サンプル")

        self.WHITE = (255, 255, 255)
        self.BLUE = (0, 0, 255)
        self.running = True

    def run(self):
        while self.running:
            self.handle_events()
            self.update()
            self.render()
        self.cleanup()

    def handle_events(self):
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                self.running = False

    def update(self):
        pass

    def render(self):
        self.screen.fill(self.WHITE)
        pygame.draw.rect(self.screen, self.BLUE, pygame.Rect(100, 100, 150, 100))
        pygame.display.flip()

    def cleanup(self):
        pygame.quit()
        sys.exit()

class App:
    def __init__(self):
        print("アプリケーションを初期化します")
        self.game = GameWindow()

    def run(self):
        print("ゲームを開始します")
        self.game.run()

if __name__ == "__main__":
    app = App()
    app.run()

🧩 クラス設計の意図

クラス名役割
GameWindow実際のゲームロジック・描画・イベント管理
Appアプリ全体の起動と管理、ゲーム開始指示

この構成なら、以下のような拡張がしやすくなります:

  • App にログイン画面や設定画面などを追加
  • ゲームのモード切り替え(例:タイトル画面・ゲーム画面)
  • 他ライブラリ(例:PyQt や tkinter)との統合も可能

よかったらシェアしてね!
目次