Pyxelの使い方|ゲーム制作をゼロから徹底解説
Pyxelは、Pythonでレトロ風のゲームを作れるゲームエンジンです。日本人開発者による、オープンソースのツールです。画像や音を作る専用エディタも付属しています。素材集めに悩まず、すぐに制作を始められます。本記事では、Pyxelのインストールから解説します。入力処理、図形描画、当たり判定、サウンド再生まで、多彩な角度で紹介します。ゲームの配布方法や、リハビリ分野への応用アイデアまで、初心者の方に向けて丁寧にまとめました。
01Pyxelとは|レトロ風ゲームを作れるPython製エンジン

Pyxelの特徴
Pyxelは、Pythonでゲームを作るためのエンジンです。公式GitHubリポジトリによると、Kitao Takashi氏によって開発されました。ファミコンのような、レトロなゲーム機の雰囲気が特徴です。16色のカラーパレット、3枚のイメージバンク、8枚のタイルマップを持っています。同時に4チャンネルのサウンドを再生できます。仕様がシンプルなぶん、気軽にドット絵ゲームを楽しめます。
Pygameとの違い
当サイトでは、以前にPygameというライブラリも紹介しました。Pyxelとはどう違うのでしょうか。もっとも大きな違いは、専用のリソースエディタです。Pyxelには、画像や音を作るエディタが最初から付属しています。Pygameのように、外部の画像編集ソフトを別途用意する必要がありません。
表現力と自由度のトレードオフ
一方で、トレードオフもあります。Pyxelは画面サイズが最大255までです。色数も16色に制限されています。Pygameのような自由な解像度や、フルカラーの表現はできません。しかし、この制約こそがPyxelの個性です。あえて選択肢を絞ることで、迷わずに完成まで進めます。初心者にとっては、むしろ扱いやすい設計だと言えるでしょう。
| 項目 | Pyxel | Pygame |
|---|---|---|
| 得意な表現 | ドット絵・レトロ風 | 自由度の高いグラフィック全般 |
| リソースエディタ | 標準で付属 | 付属しない(外部ソフトが必要) |
| 配布のしやすさ | 専用形式やHTML変換に対応 | PyInstallerなど別ツールが必要 |
| 学習の始めやすさ | 非常に手軽 | やや自由度が高い分、選択肢が多い |
どちらが優れている、というものではありません。作りたいものに応じて選ぶとよいでしょう。
Pygameで基本を学んだTさんは、次にPyxelを試してみた。画像素材を用意する手間がないことに驚いたという。エディタでドット絵を描き、そのままコードから呼び出せたのだ。素材探しに時間を取られず、アイデアをすぐに形にできる。この手軽さが、Pyxelならではの魅力だと感じたそうだ。
02インストール方法|pip install pyxelから動作確認まで

pipでインストールする
Pyxelは、Python3.7以降で動作します。まずはバージョンを確認しておきましょう。インストールは、pipコマンド1つで完了します。
pip install -U pyxel
Windows環境では、注意点があります。Pythonのインストール時に「Add python.exe to PATH」にチェックを入れておきましょう。これを忘れると、pyxelコマンドが認識されないことがあります。
Mac・Linuxでの準備
Macの場合は、Homebrewを使う方法が簡単です。事前にSDL2関連のパッケージを入れておきます。Linuxの場合は、libsdl2-devなどのパッケージを用意してから、pipでインストールします。
サンプルをコピーして動作確認する
インストールが終わったら、公式サンプルを試してみましょう。次のコマンドで、サンプル一式がコピーされます。
pyxel copy_examples
コピーされたフォルダの中に移動し、次のように実行します。
cd pyxel_examples
pyxel run 01_hello_pyxel.py
レトロな雰囲気のウィンドウが表示されれば、準備は完了です。
03最初のプログラム|updateとdrawの2つの関数

最小構成のコード
Pyxelのプログラムには、決まった型があります。公式APIリファレンスでも紹介されている、基本の書き方です。
import pyxel
pyxel.init(160, 120)
def update():
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
def draw():
pyxel.cls(0)
pyxel.rect(10, 10, 20, 20, 11)
pyxel.run(update, draw)
各部分の役割
pyxel.init()があります。画面の幅と高さを指定して初期化します。注意点があります。画面サイズの上限は255までです。Pygameのような大画面には向きません。その分、レトロな表現に集中できます。update()関数は、状態を更新する処理です。draw()関数は、画面を描画する処理です。pyxel.run()に、この2つの関数を渡します。すると、自動的にループが回ります。
クラスを使った書き方
公式ドキュメントでは、クラスを使う書き方も推奨されています。規模が大きくなったときに、見通しがよくなるためです。
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120)
self.x = 0
pyxel.run(self.update, self.draw)
def update(self):
self.x = (self.x + 1) % pyxel.width
def draw(self):
pyxel.cls(0)
pyxel.rect(self.x, 0, 8, 8, 9)
App()
ループが不要な場合はshow()も使える
動きのない、静止画のような表現もあるでしょう。その場合は、pyxel.show()が便利です。ループを書かずに、1回だけ描画して表示できます。
import pyxel
pyxel.init(120, 120)
pyxel.cls(1)
pyxel.circb(60, 60, 40, 7)
pyxel.show()
用途に応じて、run()とshow()を使い分けましょう。
04入力を扱う|btnとbtnpの使い分け

btnpは押された瞬間だけを検知する
Pyxelには、入力を検知する関数が2つあります。pyxel.btnp()は、キーが押された瞬間だけを検知します。ボタンを押すたびに1回だけ処理したい場合に向いています。メニュー選択や、ジャンプ操作によく使われます。
def update():
if pyxel.btnp(pyxel.KEY_SPACE):
print("スペースキーが押されました")
btnは押され続けているかを検知する
pyxel.btn()は、キーが押され続けているかを毎フレーム確認します。キャラクターの移動など、なめらかな操作に向いています。
def update():
if pyxel.btn(pyxel.KEY_RIGHT):
player_x += 2
この2つの違いは、Pygameのイベント処理と似た関係です。用途に応じて、正しく使い分けましょう。
05図形と画像を描画する

基本の図形描画
Pyxelには、多くの描画関数が用意されています。rect()で四角形、rectb()で四角形の輪郭を描けます。circ()で円、circb()で円の輪郭を描けます。色は、0〜15の数値で指定します。16色のパレットに対応した番号です。
def draw():
pyxel.cls(0) # 画面全体を色0でクリア
pyxel.rect(10, 10, 30, 20, 8) # 塗りつぶした四角形
pyxel.circb(80, 60, 15, 11) # 円の輪郭
画像を表示する
画像を表示するには、まずイメージバンクに読み込みます。そのあと、blt()関数で画面に描画します。
pyxel.image(0).load(0, 0, "assets/cat_16x16.png")
def draw():
pyxel.cls(0)
pyxel.blt(75, 45, 0, 0, 0, 16, 16)
blt()の引数には意味があります。表示先の座標、イメージバンク番号、読み込み元の座標、幅と高さの順です。慣れないうちは、公式サンプルの数値を真似てみるとよいでしょう。
06当たり判定の基本

座標を比較して判定する
Pyxelには、PygameのRectのような専用クラスはありません。その代わり、座標を自分で比較する形で判定します。四角形同士の重なりは、次のような条件式で調べられます。
def is_colliding(x1, y1, w1, h1, x2, y2, w2, h2):
return (x1 < x2 + w2 and x1 + w1 > x2 and
y1 < y2 + h2 and y1 + h1 > y2)
タイルマップとの当たり判定
Pyxelには、便利な機能もあります。タイルマップ専用のcollide()という関数です。地形との衝突を、まとめて処理できます。マップを使ったアクションゲームを作る際に役立ちます。慣れてきたら、ぜひ試してみてください。
frame_countで時間経過を扱う
当たり判定と合わせて覚えておきたい機能があります。pyxel.frame_countです。ゲーム開始からの経過フレーム数を、自動で数えてくれる変数です。一定時間ごとに敵を出現させたり、点滅アニメーションを作ったりする際に活用できます。
def draw():
# 16フレームごとに点滅させる
if pyxel.frame_count % 16 < 8:
pyxel.text(10, 10, "GAME OVER", 8)
07サウンドを鳴らす
効果音を定義して再生する
Pyxelのサウンドには、特徴があります。チップチューン風の音を、コード上で直接作れるのです。音楽ファイルを別途用意する必要はありません。
pyxel.sounds[0].set(
note="c3e3g3", # 音階
tone="s", # 音色(矩形波)
volume="7", # 音量
effect="n", # エフェクトなし
speed=10, # 再生速度
)
def update():
if pyxel.btnp(pyxel.KEY_SPACE):
pyxel.play(0, 0) # チャンネル0でサウンド0を再生
BGMを再生する
複数のサウンドを組み合わせると、音楽トラック(Music)を作れます。pyxel.playm()を使えば、BGMとして再生できます。専用エディタを使えば、こうした音作りもマウス操作で行えます。次の章で紹介します。
08専用リソースエディタを使う
Pyxel Editorとは
ここが、Pyxelならではの大きな特徴です。専用のリソースエディタが標準で付属しています。pyxel editコマンドで起動できます。画像、タイルマップ、サウンド、音楽を、マウス操作で作成できます。プログラミングの知識がなくても、素材作りだけは進められます。
pyxel edit my_resource.pyxres
エディタで保存したファイルは、.pyxresという拡張子になります。これをコードから読み込むには、pyxel.load()を使います。
pyxel.load("my_resource.pyxres")
画像編集ソフトと、音楽制作ソフトと、ゲームエンジンが一体になっている。そんなイメージを持つと分かりやすいでしょう。この統合された環境こそ、Pyxelが「ゲーム制作をゼロから」体験できる理由です。
09実践例:ボールが跳ね返るミニゲームを作る
これまでの知識を組み合わせる
ここまで学んだ内容を組み合わせて、簡単なミニゲームを作ってみましょう。画面の中をボールが動き回ります。壁にぶつかると跳ね返る、シンプルな仕組みです。
import pyxel
class App:
def __init__(self):
pyxel.init(160, 120, title="跳ね返るボール")
self.x = 80
self.y = 60
self.dx = 2
self.dy = 1
pyxel.run(self.update, self.draw)
def update(self):
if pyxel.btnp(pyxel.KEY_Q):
pyxel.quit()
self.x += self.dx
self.y += self.dy
# 壁にぶつかったら向きを反転させる
if self.x < 4 or self.x > pyxel.width - 4:
self.dx *= -1
if self.y < 4 or self.y > pyxel.height - 4:
self.dy *= -1
def draw(self):
pyxel.cls(1)
pyxel.circ(self.x, self.y, 4, 10)
App()
発展のヒント
このコードに、プレイヤーが操作するパドルを追加してみましょう。4章のbtn関数を使えば実装できます。6章で紹介した当たり判定と組み合わせれば、ブロック崩しに近づきます。少しずつ機能を足しながら、自分だけのゲームに育てていきましょう。
10完成したゲームを配布する

pyxappファイルにまとめる
ゲームが完成したら、誰かに遊んでもらいたくなるでしょう。Pyxelには、専用の配布形式があります。.pyxappというファイルです。次のコマンドでまとめられます。
pyxel package APP_DIR STARTUP_SCRIPT_FILE
作成したファイルは、次のコマンドで実行できます。
pyxel play my_game.pyxapp
実行ファイルやHTMLに変換する
さらに便利な機能もあります。pyxel app2exeを使うと、実行ファイルに変換できます。Pythonの環境がないパソコンでも遊べるようになります。pyxel app2htmlを使うと、HTMLファイルに変換できます。対応ブラウザさえあれば、パソコンでもスマートフォンでも遊べます。手軽に友人へ共有したいときに便利な方法です。
11医療・リハビリ分野での応用アイデア
手軽さを活かした試作ツール
ここからは、当サイトならではの視点です。Pyxelの手軽さは、リハビリ分野の試作にも活かせます。3つのアイデアを紹介します。
1シンプルな反応課題ゲーム
画面に現れる図形を、素早くボタンで撃ち落とすようなミニゲームです。Pyxelの16色パレットは、視覚的にはっきりした刺激を作りやすい特徴があります。注意機能や反応速度の、簡易的な評価課題に応用できます。
2記憶・順序課題のミニゲーム
決まった順番で光るマスを覚えて、同じ順番で入力するゲームです。認知トレーニングの分野でよく使われる課題です。Pyxelのシンプルな描画機能だけで、十分に実装できます。
3素早い試作とフィードバック
Pyxelの強みは、素材作りから実装までを1つの環境で完結できる点です。臨床のアイデアを、その場ですぐに試作できます。患者さんやスタッフからのフィードバックを、短いサイクルで反映しやすくなります。
実運用の前に確認すべきこと
これらは、あくまでアイデアの一例です。実際に臨床現場で使う場合は、有効性の検証が欠かせません。専門家への相談も必要です。それでも、「思いついたらすぐ形にできる」という体験は、学習や臨床アイデアの検証において大きな価値を持ちます。
12よくあるエラーと対処法
症状別の対処早見表
| 症状 | 主な原因 | 対処法 |
|---|---|---|
| pyxelコマンドが見つからない | PATHが通っていない | Python導入時にPATH設定を確認する(2章参照) |
| 画面サイズを大きくしてもエラーになる | 幅・高さの上限(255)を超えている | 画面サイズを255以下に収める(3章参照) |
| 画像が表示されない | ファイルパスの間違い、読み込み順の誤り | load()のパスと、blt()の引数を再確認する(5章参照) |
| 音が鳴らない | sounds[]への設定忘れ、チャンネル番号の重複 | set()での定義とplay()の引数を確認する(7章参照) |
| pyxel editが起動しない | グラフィック環境の問題、ファイルパスの誤り | ターミナルのエラーメッセージを確認する(8章参照) |
公式ドキュメントを活用する
初めて画像を読み込んだRさんは、キャラクターが表示されないというトラブルに直面した。コードを見直しても、原因が分からなかった。そこで、blt()の引数の順番を1つずつ確認してみた。すると、読み込み元の座標と表示先の座標を、取り違えていたことに気づいた。修正すると、無事に表示された。引数の多い関数ほど、公式リファレンスと照らし合わせる習慣が役立ちます。
13よくある質問
基本のQ&A
応用のQ&A
関連記事・参考資料
基礎を学べる記事
- YOFUKASI LAB「Pygame入門|Pythonでゲームを作る方法」2026年, https://yofukasi-lab-wp.com/2026/09/05/pygame-python-game/
- 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「ArduinoとPythonとセンサーを用いたリハビリテーションへの応用」2026年, https://yofukasi-lab-wp.com/2026/07/11/rehabilitation/
- YOFUKASI LAB「PythonによるDelsysの筋電図のCSVデータを可視化」2026年, https://yofukasi-lab-wp.com/2026/07/13/delays_emg/
- YOFUKASI LAB「Arduinoのコンパイルエラー一覧」2026年, https://yofukasi-lab-wp.com/2026/07/30/error/
参考資料(外部・一次情報)
- GitHub「kitao/pyxel:A retro game engine for Python」, https://github.com/kitao/pyxel
- Pyxel Documentation「API Reference」, https://kitao.github.io/pyxel/web/api-reference/
- DevelopersIO「【Pythonでゲームを作ろう!】レトロな2Dゲームを作ってみた!」, https://dev.classmethod.jp/articles/gamedev-with-python-pyxel1/
※本記事は個人の学習・趣味用途を対象にしています。リハビリ・医療分野での実運用を検討する場合は、有効性の検証や専門家への相談を必ず行ってください。
コメント