Pygame入門|Pythonでゲームを作る方法を徹底解説
Pygameは、Pythonでゲームを作るための定番ライブラリです。
この記事では、最初に「結局、何をすればゲームが動くのか」を最短手順で解説します。
まず完成コードを動かし、そのあとでゲームループ、キーボード・マウス入力、図形描画、当たり判定、サウンド、スプライトなどの仕組みを1つずつ理解していきます。
最初からすべてを覚える必要はありません。まずは動かしてみましょう。
“`
00
まずはここから|Pygameを最短で動かす5ステップ
Pygameについて詳しく勉強する前に、まずは「何をすれば動くのか」をつかんでおきましょう。
最初からゲームループやスプライト、当たり判定の意味を覚える必要はありません。
まずは次の5ステップだけ進めて、キーボードで四角形を動かすところまでやってみます。
黒い画面に水色の四角形を表示し、キーボードの
← → ↑ ↓を押すと四角形が動く。
ここまでできれば、Pygameを始める準備は完了です。
最初にやることは、この5つだけ
Pythonが使えるか確認する
ターミナルやコマンドプロンプトを開き、Pythonのバージョンが表示されるか確認します。
Pygameをインストールする
コマンドを1つ入力して、PygameをPythonに追加します。
Pythonファイルを1つ作る
pygame_start.pyというファイルを作ります。
完成コードをそのまま貼る
最初は1行ずつ理解しなくても大丈夫です。まず動かします。
実行して矢印キーを押す
四角形が上下左右に動けば成功です。
STEP 1|Pythonが使えるか確認する
Windowsなら「コマンドプロンプト」または「PowerShell」、
Macなら「ターミナル」を開きます。
次のコマンドを入力して、Enterキーを押してください。
python --version
次のようにPythonのバージョンが表示されればOKです。
Python 3.13.7
pythonで表示されない場合は、環境によって次のコマンドを使います。
python3 --version
Windowsでは、こちらで確認できる場合もあります。
py --version
Pythonのバージョン番号が表示されたら、数字の意味は気にせず次へ進んで大丈夫です。
STEP 2|Pygameをインストールする
Pythonが使えることを確認したら、Pygameをインストールします。
基本は、次のコマンドをそのまま実行するだけです。
python -m pip install pygame
STEP 1でpython3を使った場合はこちらです。
python3 -m pip install pygame
Windowsでpyを使った場合はこちらです。
py -m pip install pygame
インストールが終わったら、次のコマンドでPygameを読み込めるか確認できます。
python -c "import pygame; print(pygame.version.ver)"
Pygameのバージョン番号が表示されれば、インストールは完了です。
STEP 3|pygame_start.pyを作る
次に、Pythonのコードを書くファイルを1つ作ります。
pygame_start.py
Visual Studio Code、IDLE、PyCharmなど、普段使っているエディタで構いません。
ファイル名の最後が.pyになっていることを確認してください。
pygame_start.py.txtになっているとPythonファイルとして実行できません。
STEP 4|完成コードを全部コピーする
ここでは、コードの意味を全部理解する必要はありません。
まずは完成したものを動かす。
そのあとで、下の章を読みながら「この行は何をしているのか」を理解していきます。
import pygame
```
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("はじめてのPygame")
clock = pygame.time.Clock()
player = pygame.Rect(375, 275, 50, 50)
speed = 5
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_LEFT]:
player.x -= speed
if keys[pygame.K_RIGHT]:
player.x += speed
if keys[pygame.K_UP]:
player.y -= speed
if keys[pygame.K_DOWN]:
player.y += speed
player.clamp_ip(screen.get_rect())
screen.fill((20, 20, 30))
pygame.draw.rect(
screen,
(0, 220, 200),
player
)
pygame.display.flip()
clock.tick(60)
```
pygame.quit()
“`
貼り付けたら、ファイルを保存します。
STEP 5|プログラムを実行する
ターミナルまたはコマンドプロンプトで、
pygame_start.pyを保存した場所に移動して、次を実行します。
python pygame_start.py
python3を使っている環境ならこちらです。
python3 pygame_start.py
Windowsでpyを使っている場合はこちらです。
py pygame_start.py
新しいウィンドウが開いて、水色の四角形が表示されます。
← → ↑ ↓を押して四角形が動けば成功です。
いま何をしたのかを、簡単に整理
ここまでで行ったことは、実はそれほど多くありません。
| やったこと | ゲームでは何を意味する? |
|---|---|
| Pygameを起動した | ゲームを作る準備 |
| ウィンドウを作った | ゲーム画面を作成 |
| 四角形を作った | プレイヤーを作成 |
| 矢印キーを調べた | プレイヤーの操作 |
| 位置を変えた | キャラクターを移動 |
| 画面を描き直した | 動いているように見せる |
特に大切なのは、次の流れです。
キーなどの入力を見る → キャラクターの状態を変える → 画面を描き直す
Pygameのゲームは、この流れを高速で何度も繰り返して動いています。
「なぜ何度も繰り返すの?」「pygame.Rectって何?」「clock.tick(60)は何をしているの?」
と疑問に感じても、今は問題ありません。
ここから先の章では、いま動かしたコードを1つずつ分解して解説します。
まず動かしたものを、あとから理解するという順番で進めていきましょう。
“`
01Pygameとは|Pythonでゲームを作るための定番ライブラリ
“`

先ほどの最短手順で、すでにPygameを使ったプログラムを1つ動かしました。
ここからは「Pygameとは何なのか」を整理していきます。
Pygameの立ち位置
Pygameは、Pythonでゲームを作るためのライブラリです。
対話型のグラフィックアプリケーションにも使えます。
Pygame公式ドキュメントでは、ゲーム制作でよく使う機能がまとめて提供されています。
- ウィンドウを表示する
- キーボードやマウスの入力を受け取る
- 画像や図形を描く
- 音を鳴らす
- 当たり判定を行う
- キャラクターをまとめて管理する
自分でゼロから画面表示やキー入力の仕組みを作らなくても、Pygameが必要な道具を用意してくれています。
Pygameは「Pythonにゲーム制作の道具箱を追加するもの」と考えると分かりやすいでしょう。
PygameとPygame-ceの違い
Pygameには、pygame-ceという派生版も存在します。
ceはCommunity Editionの略です。
基本的なAPIには共通する部分が多く、本記事で扱う入門レベルの内容は、どちらを使う場合でも学習に役立ちます。
他の選択肢と比べてみる
| 選択肢 | 特徴 | 向いている人 |
|---|---|---|
| Scratch | ブロックを組み合わせる視覚的な言語 | プログラミング自体が初めての方、子ども向け |
| Pygame | Pythonのコードでシンプルに書ける | Pythonの基礎を学んだ方、仕組みを理解したい方 |
| Unity | 本格的な2D・3Dゲームエンジン | より大規模な作品を作りたい方 |
Pythonを少し触ったことがあり、「今度は画面の中で何かを動かしてみたい」という人には、Pygameは取り組みやすい選択肢です。
“`
02インストール方法|pip install pygameから動作確認まで
“`

pipでインストールする
冒頭の最短手順でも使いましたが、Pygameはコマンド1つでインストールできます。
python -m pip install pygame
python3を使っている環境では、次のようにします。
python3 -m pip install pygame
Windowsでpyを使っている場合はこちらです。
py -m pip install pygame
なぜpython -m pipを使うの?
pip install pygameでもインストールできます。
ただし、パソコンの中に複数のPythonが入っていると、別のPythonへPygameがインストールされる場合があります。
python -m pipという書き方にすると、「今使っているPythonでpipを実行する」という形になるため、初心者には分かりやすい方法です。
インストールの確認
python -c "import pygame; print(pygame.version.ver)"
バージョン番号が表示されれば、インストールは成功です。
仮想環境を使うという選択肢
複数のPythonプロジェクトを扱うようになったら、仮想環境(venv)を使う方法があります。
プロジェクトごとにライブラリを分離できるため、他のプロジェクトへの影響を減らせます。
ただし、最初の1本を動かす段階では必須ではありません。
“`
03最初のプログラム|ウィンドウを表示する
“`
ここからは、冒頭で動かした完成コードを小さく分けて理解していきます。
最小構成のコード
import pygame
```
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("最初のPygameウィンドウ")
running = True
while running:
```
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
screen.fill((0, 0, 0))
pygame.display.flip()
```
pygame.quit()
“`
まず5つだけ理解する
Pygameを読み込む
import pygameでPygameの機能を使えるようにします。
Pygameを使う準備をする
pygame.init()で初期化します。
ウィンドウを作る
pygame.display.set_mode()でゲーム画面を作ります。
閉じる操作を確認する
pygame.event.get()でイベントを確認します。
画面を更新する
pygame.display.flip()で描いた内容を表示します。
pygame.init()
Pygameを使うための準備をします。
最初は「Pygameの電源を入れるようなもの」と考えて構いません。
pygame.display.set_mode()
screen = pygame.display.set_mode((800, 600))
横800ピクセル、縦600ピクセルのウィンドウを作っています。
screen.fill()
screen.fill((0, 0, 0))
画面全体を黒色で塗っています。
pygame.display.flip()
ここまでに描いた内容を、実際のウィンドウへ反映します。
Pygameでは、図形などを描いただけでは画面に反映されません。最後に画面を更新する処理が必要です。
“`
04ゲームループの仕組み|Pygameの心臓部
“`

ゲームは同じ処理を何度も繰り返す
ゲームのキャラクターは、実際には1回の命令だけで動き続けているわけではありません。
次の処理を高速で何度も繰り返しています。
- キーやマウスの入力を見る
- キャラクターの位置などを変える
- 画面を描き直す
この繰り返しをゲームループと呼びます。
while running:がゲームループ
while running:
runningがTrueの間、下に書かれた処理を何度も繰り返します。
ゲームループの基本形
while running:
# 1. 入力を確認する
# 2. キャラクターなどを動かす
# 3. 画面を描く
# 4. 画面を更新する
フレームレートを制御する
パソコンが全力でゲームループを実行すると、パソコンの性能によってゲームの速度が変わることがあります。
clock = pygame.time.Clock()
そしてゲームループの最後に、次を書きます。
clock.tick(60)
これは、ゲームループが必要以上に速く回らないよう調整するための処理です。
入力を見る → 状態を変える → 描く → また入力を見る
“`
05キーボード・マウス入力を扱う
“`

キーボードでキャラクターを動かす
keys = pygame.key.get_pressed()
```
if keys[pygame.K_LEFT]:
player.x -= 5
if keys[pygame.K_RIGHT]:
player.x += 5
if keys[pygame.K_UP]:
player.y -= 5
if keys[pygame.K_DOWN]:
player.y += 5
“`
ここで行っていることは単純です。
- 左キーが押されていたらxを小さくする
- 右キーが押されていたらxを大きくする
- 上キーが押されていたらyを小さくする
- 下キーが押されていたらyを大きくする
xとyとは?
画面上の場所は、基本的にxとyという2つの数字で表します。
- x:左右の位置
- y:上下の位置
xが大きくなるほど右へ進み、yが大きくなるほど下へ進みます。
キーを押した瞬間だけ調べる
for event in pygame.event.get():
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_SPACE:
print("スペースキーが押されました")
メニューの決定など、「1回押したときだけ反応させたい」場合にはKEYDOWNを使えます。
マウスの入力を検知する
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
print("クリックされた座標:", event.pos)
event.posには、クリックした場所の座標が入ります。
“`
06図形と画像を描画する
“`
四角形を描画する
pygame.draw.rect(
screen,
(255, 255, 0),
(100, 100, 50, 50)
```
)
“`
意味は次のとおりです。
screen:どこへ描くか(255, 255, 0):色100, 100:場所50, 50:幅と高さ
円を描画する
pygame.draw.circle(
screen,
(0, 200, 255),
(400, 300),
30
```
)
“`
最後の30は円の半径です。
色の指定方法
| 色 | RGB |
|---|---|
| 赤 | (255, 0, 0) |
| 緑 | (0, 255, 0) |
| 青 | (0, 0, 255) |
| 白 | (255, 255, 255) |
| 黒 | (0, 0, 0) |
画像を表示する
player_image = pygame.image.load("player.png").convert_alpha()
```
screen.blit(player_image, (100, 100))
“`
pygame.image.load()で画像を読み込み、screen.blit()で画面へ表示します。
最初はplayer.pngをPythonファイルと同じフォルダに置くと分かりやすいでしょう。
画像はゲームループの外で読み込む
画像はゲーム開始時などに1回だけ読み込みます。
ループの中で毎回ファイルを読み込むと、動作が重くなる原因になります。
“`
07当たり判定(衝突判定)の基本
“`

ゲームでは「ぶつかった?」を何度も調べる
ゲームでは、次のような場面がよくあります。
- プレイヤーが敵にぶつかった
- 弾が敵に当たった
- キャラクターがアイテムを取った
- ボールがパドルに当たった
この「ぶつかったか」を調べる処理が当たり判定です。
Rectを使った当たり判定
player_rect = pygame.Rect(100, 100, 50, 50)
```
enemy_rect = pygame.Rect(120, 110, 50, 50)
if player_rect.colliderect(enemy_rect):
print("衝突しました")
“`
colliderect()は、2つのRectが重なっているかを調べます。
キャラクターそのものというより、「キャラクターの周りにある四角い枠同士が重なったか」を調べるイメージです。
画像から直接Rectを取得する
player_image = pygame.image.load("player.png").convert_alpha()
```
player_rect = player_image.get_rect()
player_rect.x = 100
player_rect.y = 100
“`
画像の大きさに合わせたRectを自動で作れます。
“`
08サウンドを鳴らす
“`
効果音を鳴らす流れ
- 音を使う準備をする
- 音声ファイルを読み込む
- 必要なタイミングで再生する
効果音を再生する
pygame.mixer.init()
```
jump_sound = pygame.mixer.Sound("jump.wav")
jump_sound.play()
“`
BGMをループ再生する
bgm = pygame.mixer.Sound("background.wav")
```
bgm.play(-1)
“`
-1を指定すると、繰り返し再生できます。
音もゲームループの外で読み込む
画像と同じように、音声ファイル自体はゲーム開始時に読み込み、必要なタイミングでplay()を実行します。
“`
09スプライトでオブジェクトを管理する
“`

最初からスプライトを使う必要はない
キャラクターが1つしかないゲームであれば、Rectや変数だけでも十分に作れます。
しかし、敵が10体、弾が30個、アイテムが20個と増えてくると、1つずつ管理するのは大変です。
そこで役立つのがpygame.spriteです。
スプライトとは
画像・位置・移動処理・当たり判定などを、ゲーム用の1つのオブジェクトとしてまとめる仕組みです。
スプライトクラスを定義する
class Player(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.image = pygame.image.load("player.png").convert_alpha()
self.rect = self.image.get_rect()
self.rect.x = 100
self.rect.y = 100
def update(self):
keys = pygame.key.get_pressed()
if keys[pygame.K_RIGHT]:
self.rect.x += 5
Groupでまとめて管理する
all_sprites = pygame.sprite.Group()
```
player = Player()
all_sprites.add(player)
all_sprites.update()
all_sprites.draw(screen)
“`
最初からクラスやスプライトを完璧に理解する必要はありません。
「キャラクターが増えてきたら便利になる仕組み」と覚えておけば十分です。
“`
10実践例:ボールが跳ね返るミニゲームを作る
“`
ここも最初はコピペでOK
次は、画面の中をボールが動き、壁へぶつかると跳ね返るプログラムです。
import pygame
```
pygame.init()
screen = pygame.display.set_mode((800, 600))
pygame.display.set_caption("跳ね返るボール")
clock = pygame.time.Clock()
ball_x = 400
ball_y = 300
speed_x = 4
speed_y = 3
radius = 20
running = True
while running:
```
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
ball_x += speed_x
ball_y += speed_y
if ball_x - radius < 0 or ball_x + radius > 800:
speed_x *= -1
if ball_y - radius < 0 or ball_y + radius > 600:
speed_y *= -1
screen.fill((20, 20, 30))
pygame.draw.circle(
screen,
(0, 220, 200),
(ball_x, ball_y),
radius
)
pygame.display.flip()
clock.tick(60)
```
pygame.quit()
“`
水色のボールが画面の中を動き、端へ到達すると反対方向へ跳ね返れば成功です。
なぜ跳ね返るの?
横方向の速さをspeed_xとします。
speed_x = 4
壁へ当たったとき、次の処理をします。
speed_x *= -1
すると、
4 → -4
となり、進む方向が逆になります。
数字を変えて遊んでみる
speed_x = 8
```
speed_y = 6
“`
数字を大きくすると、ボールが速くなります。
radius = 50
半径を大きくすると、ボールが大きくなります。
次に追加すると面白い機能
- キーボードで動かせるパドルを作る
- ボールとパドルの当たり判定を作る
- ブロックを並べる
- ボールがブロックに当たったら消す
- 得点を表示する
- 効果音を鳴らす
この順番で追加していけば、ブロック崩しゲームへ発展させられます。
“`
11医療・リハビリ分野での応用アイデア
“`
Pygameは娯楽用ゲームにとどまらない
Pygameで作れるのは、娯楽用ゲームだけではありません。
「画面を表示する」「入力を受け取る」「結果を表示する」という仕組みを利用すれば、さまざまな試作ツールを作れます。
1反応時間測定ツール
画面に図形が表示されてからキーを押すまでの時間を計測するプログラムです。
Pythonの時間計測機能とPygameのキー入力を組み合わせれば試作できます。
2視線・手指の追従トレーニングゲーム
画面上を移動する円や四角形をマウスで追いかけます。
マウス座標を使えば、視覚的な追従課題や上肢操作を伴う教材の試作につなげられます。
3Arduinoセンサーと連携した動作フィードバック
ArduinoからPythonへセンサー値を送り、その値でPygameのキャラクターを動かすこともできます。
例えばMPU6050で計測した傾きの値を使い、Pygame上のボールを動かすといった応用です。
基本的な流れ
Arduinoで動きを測る
加速度や角度、圧力などの値を取得します。
Pythonへ数値を送る
シリアル通信などを使ってPCへ送ります。
Pygameで視覚的に表示する
センサー値に応じてキャラクターやバー、ボールなどを動かします。
実運用には専門家への相談を
Pygameで試作できることと、臨床で有効な評価・治療機器として使用できることは別です。
実際の医療・リハビリ用途で使用する場合は、安全性、再現性、測定精度、有効性などを含めた検討が必要です。
“`
12よくあるエラーと対処法
“`
まずこの順番で確認する
Pythonが動くか
python --versionなどで確認します。
Pygameが入っているか
python -m pip install pygameを確認します。
実行しているファイルが正しいか
別のPythonファイルを実行していないか確認します。
画像や音声の場所が正しいか
ファイル名や保存場所を確認します。
エラーメッセージの最後を見る
まず一番下の1〜3行を確認します。
症状別の対処早見表
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| No module named pygame | Pygameが入っていない、または別のPythonへ入っている | python -m pip install pygameを実行 |
| pythonが見つからない | Pythonが未インストール、またはコマンド名が違う | python3やpyを試す |
| ウィンドウがすぐ閉じる | ゲームループがない | while running:を確認 |
| 画面が固まる | イベント処理をしていない可能性 | pygame.event.get()を確認 |
| 画像が表示されない | ファイル名や保存場所が違う | Pythonファイルと画像の場所を確認 |
| 動きが速すぎる | フレームレート制御がない | clock.tick(60)を追加 |
| 音が鳴らない | 初期化やファイル指定の問題 | pygame.mixer.init()とファイル名を確認 |
No module named pygameが出る場合
ModuleNotFoundError: No module named 'pygame'
この場合は、今プログラムを動かしているPythonからPygameが見つかっていません。
python -m pip install pygame
画像ファイルが見つからない場合
たとえば、
pygame.image.load("player.png")
と書いている場合、Pythonからplayer.pngを見つけられる場所に画像が必要です。
最初は、
- pygame_start.py
- player.png
を同じフォルダに置くと分かりやすいでしょう。
エラー文は最後から見る
Pythonのエラーは長く表示されることがあります。
最初から全部読む必要はありません。
まず一番下の1〜3行を見て、
- 何というエラーか
- 何が見つからないのか
- 何行目付近で起きたのか
を確認しましょう。
“`
13よくある質問
“`
clock.tick(60)があるか確認してください。また、画像や音声ファイルをゲームループ内で毎回読み込んでいる場合は、ループの外へ移動します。“`
“`
関連記事・参考資料
基礎を学べる記事
- YOFUKASI LAB「Arduinoは何言語?C言語・C++との違いを初心者向けに解説」2026年, https://yofukasi-lab-wp.com/2026/09/04/arduino-language-c-cpp/
- YOFUKASI LAB「電子工作入門|初心者が最初に覚える基本と始め方」2026年, https://yofukasi-lab-wp.com/2026/09/04/electronics-beginner-guide/
- YOFUKASI LAB「PythonによるDelsysの筋電図のCSVデータを可視化」2026年, https://yofukasi-lab-wp.com/2026/07/13/delays_emg/
応用・関連記事
- YOFUKASI LAB「ArduinoとPythonとセンサーを用いたリハビリテーションへの応用」2026年, https://yofukasi-lab-wp.com/2026/07/11/rehabilitation/
- YOFUKASI LAB「ArduinoでMPU6050|加速度と角速度」2026年, https://yofukasi-lab-wp.com/2026/08/31/mpu6050/
- YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/
参考資料(外部・一次情報)
- Pygame Documentation「Pygame Front Page」, https://www.pygame.org/docs/
- Pygame-ce Documentation「Pygame-ce Front Page」, https://pyga.me/docs/
- Real Python「Pygame: A Primer on Game Programming in Python」, https://realpython.com/pygame-a-primer/
※本記事は個人の学習・趣味用途を主な対象としています。リハビリ・医療分野での実運用を検討する場合は、安全性・有効性・測定精度等を検討し、必要に応じて専門家へ相談してください。
“`
コメント