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)との統合も可能