【2026年版】Pyxelでレトロゲームを作る方法|AI×Pythonゲーム開発・使い方完全ガイド

Arduino 機器制作






【2026年版】Pyxel入門ガイド|Pythonでつくる、はじめてのレトロゲーム





PYTHON RETRO GAME ENGINE

自分だけのレトロゲームを作ろう
「Pyxel」入門ガイド_

ドット絵と8bitサウンドで動く、小さくて自由なゲーム作りの世界へ。プログラムが初めての人でも、AIチャットを相棒にしながら、ステージを1つずつクリアする感覚で読み進められます。

Pyxelで作られたドット絵レトロゲームのイメージ
Pyxelは、少ない色数と低い解像度で「あの頃のゲーム」の雰囲気を再現します

Pyxel(ピクセル)は、プログラミング言語 Python で動く、無料のレトロゲームエンジンです。むずかしい専門用語はできるだけ使わず、この記事を読み終える頃には「動くゲーム」が自分の手で作れるところまで、一気に案内します。インストールのやり方から、画面・音・当たり判定、実際に遊べるサンプルゲーム、そしてChatGPTやClaudeのようなAIチャットを相棒にしたコード作りのコツまで、ステージを進むように学んでいきましょう。

STAGE 00

Pyxelってなに?

Pyxelは、日本人エンジニアのkitaoさんが作った、オープンソースのゲームエンジンです。「オープンソース」というのは、作り方の設計図(プログラムのコード)がGitHubで世界中に公開されていて、誰でも無料で使ったり、改造したりできる、という意味です。

🎮 かんたん解説:レトロゲームってどんなゲーム?

画面がカクカクした四角いドット(マス目)でできていて、色の数も少ない、昔のファミコンやゲームボーイのようなゲームのことです。今のなめらかなゲームとは違う、あたたかい雰囲気が魅力です。

  • ライセンスMITライセンスという、商用利用もふくめて自由に使ってよいルールで公開されています
  • 専用エディタ:ドット絵・効果音・音楽・マップを、すべて1つのアプリの中で作れます
  • Pythonが土台Pythonの基本的な書き方さえわかれば、初心者でもゲーム作りに挑戦しやすい設計です
SPONSORED


STAGE 01

Pyxelが選ばれる理由

① おどろくほどシンプルな命令

「画面を作る」「文字を出す」「絵を表示する」といった動作が、それぞれ1行のコードで書けるように設計されています。覚えることが少ないので、最初のつまずきが起きにくいのが特長です。

② わざと不便にして生まれる味わい

  • 画面の大きさは最大でも256×256ドット(よく使われるのは160×120くらいの小さめサイズ)
  • 使える色は基本16色だけ(自分で色を変えることもできます)

今どきのゲームからすると不便に思えるかもしれませんが、この「制限」こそが、ファミコンやゲームボーイのような、なつかしくてあたたかい雰囲気を生み出しています。

③ どのパソコンでも動く

Windows・macOS・Linuxのどれでも、Pythonが動く環境さえあれば同じように遊べます。

④ 絵も音もぜんぶ1つのアプリで

ターミナルからpyxeleditorと入力するだけで専用エディタが立ち上がり、ドット絵・マップ・効果音・音楽をまとめて作れます。詳しくはステージ09で解説します。

⑤ 仲間とサンプルが豊富

GitHub上のPyxel公式リポジトリには、世界中の人が作ったサンプルコードや作品が公開されています。困ったときに参考にできる情報が多いのも、学びやすさにつながっています。


RELATED
同じPythonゲーム制作の実例Arduino×Pygameのジャンプゲーム開発は、生成AIを使うとどこまで速くなるのか。

STAGE 02

はじめよう:インストール

Pyxelは、PythonのパッケージとしてPyPIで配布されています。まだPythonを入れていない場合はPython公式サイトから先にインストールしておきましょう。準備ができたら、ターミナル(またはコマンドプロンプト)を開いて、次のコマンドを打ち込むだけで準備完了です。

terminal
pip install pyxel

venvやcondaなどの仮想環境を使っている人は、その環境をアクティブにした状態で実行してください。仮想環境の作り方はPython公式ドキュメントのvenvガイドが参考になります。

インストールがうまくいったかどうかは、次のコマンドで確認できます。バージョン番号が表示されれば成功です。

terminal
python -c "import pyxel; print(pyxel.__version__)"

コードを書くエディタに迷ったら、無料で使えるVisual Studio Codeがおすすめです。Python拡張機能を入れるだけで、補完やエラー表示がすぐに使えるようになります。

STAGE 03

最初の一歩:最小プログラム

まずは「画面を開いて、文字をひとつ表示するだけ」の、いちばん小さなプログラムから始めましょう。

hello_pyxel.py
import pyxel
def update():
    # 毎フレーム呼ばれる、ゲームの状態を更新する場所
    pass
def draw():
    # 毎フレーム呼ばれる、画面を描く場所
    pyxel.cls(0)  # 画面を色0(黒)でクリア
    pyxel.text(50, 40, "Hello, Pyxel!", 7)  # (x, y, 文字, 色)
pyxel.init(160, 120, caption="Hello Pyxel")  # 画面の幅・高さ・タイトル
pyxel.run(update, draw)

ポイント: pyxel.initで画面を用意し、pyxel.run(update, draw)を呼ぶと、そこから先はupdate → drawの順番が、ゲームが終わるまで自動でくり返されます。

ファイルを保存して、python hello_pyxel.pyを実行すると、レトロな雰囲気のウィンドウに「Hello, Pyxel!」の文字が表示されます。

STAGE 04

画面と色のひみつ

画面の大きさ

Pyxelの画面サイズは自由に決められますが、レトロっぽさを出したいなら160×120くらいの小さいサイズがおすすめです(最大でも256×256まで)。画面を大きくするほど今どきのゲームに近づき、レトロ感はうすくなります。

使える16色

Pyxelには、あらかじめ16色のパレット(色の一覧)が用意されています。番号(カラーID)を指定するだけで、その色を使うことができます。このパレットは往年の家庭用ゲーム機の配色を思わせる、レトロで統一感のある色づかいが特徴です。

ID 0
ID 1
濃い青
ID 2
ID 3
濃い緑
ID 4
茶色
ID 5
グレー
ID 6
明るいグレー
ID 7

残りのID 8〜15にも、赤やオレンジ、水色などが割り当てられています。数字を1つ変えるだけで、絵の印象がガラッと変わるのも楽しいポイントです。

🎨 かんたん解説:カラーIDってなに?

色に名前ではなく「番号」がついている、と考えるとわかりやすいです。pyxel.text(50, 40, "Hello", 7)の最後の7は「白色(7番の色)で文字を書いてね」という意味です。

STAGE 05

ゲームの心臓部:update と draw

Pyxelのゲームは、次の2つの関数を1秒間に何十回もくり返すことで動いています。

  1. update() — キー入力のチェックや、キャラクターの位置計算など、「頭で考える」部分
  2. draw() — 考えた結果を、画面に絵として映し出す「見た目」の部分

この2つを用意してpyxel.run()に渡すだけで、ゲームらしい動きが自動的に生まれます。むずかしい仕組みを自分で組む必要がないのが、Pyxelの気持ちいいところです。この「決まった間隔で状態を更新し、描画する」考え方はゲームループと呼ばれ、ジャンルを問わず多くのゲームエンジンで採用されている基本設計です。

SPONSORED


STAGE 06

操作をつくる:キー・マウス

プレイヤーの操作は、次のようなコードで受け取ります。

input.py
if pyxel.btn(pyxel.KEY_LEFT):
    # 左キーが押され「続けている」間ずっとTrue
    player_x -= 1
if pyxel.btnp(pyxel.KEY_SPACE):
    # スペースキーが「押された瞬間」だけTrue
    jump()

  • pyxel.btn(キー) ……押されている間ずっと反応(歩く、走るなどに向いている)
  • pyxel.btnp(キー) ……押した瞬間だけ反応(ジャンプ、決定ボタンなどに向いている)

マウスやゲームパッドにも対応していて、同じ考え方で座標やボタンの状態を取得できます。

mouse.py
mx = pyxel.mouse_x
my = pyxel.mouse_y
if pyxel.btn(pyxel.MOUSE_BUTTON_LEFT):
    do_something()


RELATED
入力をゲームに変える実例リアルタイム握力計測ゲームのコードを徹底解説、応用も簡単|Arduino & Python

STAGE 07

絵を描いて動かす

イメージバンクという「絵の保管庫」

Pyxelの中には、キャラクターや背景の絵をしまっておくイメージバンクという場所があります。標準では0〜2番の3つが用意され、それぞれ256×256ドットぶんの絵を保存できます。

絵を画面に貼りつける

保管庫にしまった絵を画面に映すには、pyxel.blt(ブリット=貼りつけ、の意味)という命令を使います。

sprite.py
pyxel.blt(x, y, img, u, v, w, h, colkey)
# 例:
pyxel.blt(10, 20, 0, 0, 0, 16, 16, 0)

  • x, y ……画面のどこに貼るか
  • img ……使うイメージバンクの番号(0〜2)
  • u, v, w, h ……保管庫のどの範囲を切り取るか(左上の座標と、幅・高さ)
  • colkey ……この色は透明にする、という指定(不要なら-1

上の例は「イメージバンク0の、左上(0,0)から16×16ドットぶんを切り取り、画面の(10,20)に、色0を透明にして貼る」という意味になります。


RELATED
Pythonでの表現づくりをもっと深掘りPygameで光の粒子を操る方法|コピペ可、コードを徹底解説

STAGE 08

音を鳴らす

Pyxelは、正弦波や矩形波といったシンプルな音の波形を組み合わせて、なつかしい8bitサウンドを作ることができます。効果音や曲のデータは「サウンドバンク(0〜63番)」に保存し、番号を指定して呼び出します。

sound.py
# チャンネル0で、サウンド番号0を再生する
pyxel.play(0, 0)

  • チャンネル:0〜3の4本の再生レーンがあり、同時に音を鳴らせます
  • サウンド番号:あらかじめ用意しておいた音のデータ番号

音づくり自体は、次に紹介するPyxel Editorの中で、耳で確かめながらGUIで作るのがいちばん簡単です。

STAGE 09

Pyxel Editorで創作

ターミナルで次のコマンドを打つと、絵・マップ・音・曲をまとめて作れる専用エディタが起動します。

terminal
pyxeleditor

画面は4つのタブに分かれています。

タブ できること
Image ペン・消しゴム・塗りつぶしで、ドット絵を1マスずつ描く
Tilemap 描いた絵をパーツのように並べて、ステージの地形を作る
Sound 音の高さ・長さ・音色を調整して、効果音を作る
Music 作った音(Sound)を並べて、1曲のBGMに組み立てる

作ったデータは.pyxresという1つのファイルにまとめて保存され、ゲーム側ではpyxel.load("assets.pyxres")のように読み込んで使います。もっと作例を見たい人は、Pyxel User Examples(GitHub Wiki)もあわせてチェックしてみてください。完成した作品はitch.ioのようなインディーゲーム投稿サイトで公開することもできます。


RELATED
創作のヒントにセンサーで色が変わる!ハートが浮かぶ電子工作|Arduino×Python【Vol.1】

STAGE 10

マップでステージ作り

広いステージを作るときは、絵を1枚ずつ置くのではなくタイルマップを使うと効率的です。小さな絵(タイル)を、方眼紙のマス目に並べていくイメージです。

  • pyxel.tilemaps[0].pset(x, y, tile) ……プログラムから、指定のマスにタイルを置く
  • pyxel.bltm(x, y, tm, u, v, w, h) ……タイルマップをまとめて画面に描画する

Pyxel Editorの Tilemap タブを使えば、マウスでタイルをクリックして並べるだけなので、プログラムを書かなくても直感的にステージを組み立てられます。

STAGE 11

ぶつかったを判定する

Pyxel自体には「当たり判定」専用の命令は用意されていません。ですが、小さめのレトロゲームなら、四角形どうしが重なっているかを調べる矩形どうしの交差判定(AABB)だけで十分実用的です。

collision.py
def check_collision(x1, y1, w1, h1, x2, y2, w2, h2):
    return not (
        x1 + w1 < x2 or x2 + w2 < x1 or
        y1 + h1 < y2 or y2 + h2 < y1
    )
if check_collision(px, py, pw, ph, ex, ey, ew, eh):
    player_hp -= 1

キャラクターが増えてきたら、座標・速度・当たり判定用のサイズなどを1つのクラスにまとめておくと、コードが整理しやすくなります。

STAGE 12

実践!よけゲームを作る

ここまでの内容を組み合わせて、「左右キーで動き、上から降ってくる敵を避け続ける」ミニゲームを作ってみましょう。

avoid_game.py
import pyxel
import random
class App:
    def __init__(self):
        pyxel.init(160, 120, caption="Avoid Game")
        self.reset()
        pyxel.run(self.update, self.draw)
    def reset(self):
        self.player_x = 80
        self.player_y = 100
        self.enemies = []
        self.score = 0
        self.game_over = False
    def update(self):
        if self.game_over:
            if pyxel.btnp(pyxel.KEY_R):
                self.reset()
            return
        if pyxel.btn(pyxel.KEY_LEFT):
            self.player_x -= 2
        if pyxel.btn(pyxel.KEY_RIGHT):
            self.player_x += 2
        self.player_x = max(0, min(self.player_x, pyxel.width - 8))
        if random.random() < 0.02:
            self.enemies.append([random.randint(0, pyxel.width - 8), 0])
        for e in self.enemies:
            e[1] += 2
        self.enemies = [e for e in self.enemies if e[1] < pyxel.height]
        for e in self.enemies:
            if abs(e[0] - self.player_x) < 8 and abs(e[1] - self.player_y) < 8:
                self.game_over = True
                break
        self.score += 1
    def draw(self):
        pyxel.cls(0)
        if not self.game_over:
            pyxel.text(5, 5, f"SCORE {self.score}", 7)
            pyxel.rect(self.player_x, self.player_y, 8, 8, 11)
            for e in self.enemies:
                pyxel.rect(e[0], e[1], 8, 8, 8)
        else:
            pyxel.text(58, 50, "GAME OVER", 8)
            pyxel.text(40, 62, f"SCORE {self.score}", 7)
            pyxel.text(34, 76, "PRESS R TO RETRY", 7)
App()

四角形を並べているだけのシンプルなゲームですが、pyxel.rectの部分をステージ07で紹介したpyxel.bltに差しかえれば、そのままドット絵キャラクターのゲームに発展させられます。

SPONSORED


STAGE 13

うまく動かない時は

  1. ログを出してみるprint()で変数の中身を表示すると、どこで想定とズレているかが見えてきます
  2. 小さく分ける:プレイヤー、敵、弾などを別々のクラスに分けると、原因を探す範囲がせまくなります
  3. 動きをゆっくり確認する:Pyxelに一時停止機能はないので、フレームごとの待ち時間を自分で調整して観察するのも有効です
  4. 素材はエディタで一元管理:絵や音をバラバラに管理すると事故のもと。Pyxel Editorでまとめておくとミスが減ります
  5. エラー文をそのまま検索・質問するStack OverflowやAIチャットにエラーメッセージを貼りつけると、原因の見当がつきやすくなります


RELATED
AIとのデバッグ術をあわせて学ぶ【2026年版】AIを用いたArduinoのコードの書き方|基礎から応用まで全てがわかる初心者の手引き

STAGE 14

似ているツールと比較

Pythonやレトロゲーム向けのツールは他にもあります。目的に合わせて選ぶ参考にしてください。

ツール 特徴 向いていること
Pyxel 16色パレット・最大256×256・専用エディタ完備・命令がシンプル 小〜中規模のレトロゲーム開発
Pygame Pythonゲーム制作の定番。自由度は高いが、レトロ表現は自分で作り込む必要あり ジャンルを問わない幅広いゲーム制作
PICO-8 Lua言語ベースの仮想コンソール。128×128固定・16色 Pyxelと似た、制限つきレトロ表現
LÖVE(love2d) Luaベースで、機能の制限が少ない 2Dゲーム全般や試作(プロトタイプ)

「Pythonで書きたい」「エディタも込みで手軽に始めたい」「レトロな制限を楽しみたい」という人には、Pyxelがいちばんフィットしやすい選択肢です。Pygameでの実装イメージを先に見ておきたい人は、以下の記事もあわせてどうぞ。


RELATED
Pygameでの表現の幅を知る【コピペ可】色(カラー)、デザインの変化を自由自在に操る|VRレンズ風デジタルアート、Python、Pygame

STAGE 15

AIと一緒に作ろう

Pyxelでのゲーム作りは、ChatGPTやClaudeのようなAIチャットを相棒にすると、ぐっと進めやすくなります。全部を自分で覚えていなくても、「どう書けばいいか」をAIに聞きながら手を動かせるのが、今どきの開発スタイルです。

AIに頼れる場面

  • コードを書いてもらう:「敵がプレイヤーを追いかける動きを書いて」のように頼むと、たたき台のコードが返ってきます
  • エラーの意味を教えてもらう:赤いエラー文をそのまま貼りつけて「これはどういう意味?」と聞くだけでOKです
  • アイデア出しを手伝ってもらう:「小学生が喜ぶ敵キャラのアイデアを5つ」のように、企画の相談相手にもなります
  • ドット絵の配色案をもらう:Pyxelの16色パレットを伝えて、「勇者っぽいキャラに合う色の組み合わせは?」と聞くのも有効です
AIへのお願い方の例
Pyxelで、敵キャラがプレイヤーの座標に
向かって少しずつ近づいてくるコードを
書いてください。すでにある player_x,
player_y, enemy_x, enemy_y を使って、
update() の中に入れられる形でお願いします。

このように「今の変数名」「入れたい場所」「やりたい動き」を具体的に伝えるほど、そのままコピーして試せるコードが返ってきやすくなります。

🤖 かんたん解説:AIが書いたコードは、そのまま100点?

AIはとても頼りになりますが、まちがえることもあります。もらったコードは、まずpython ファイル名.pyで実際に動かしてみて、思った通りに動くか自分の目でたしかめる習慣をつけましょう。「なぜこう書くのか」を1行ずつ声に出して読んでみると、理解もぐっと深まります。

プロンプトのコツ: ①今書いているコードをそのまま貼る ②「Pyxelで」と最初に伝える ③やりたい動きを1つずつ短く伝える。この3つを意識するだけで、AIとのやり取りがスムーズになります。


RELATED
AIの使い分けをもっと詳しく【実務比較】ChatGPTとClaudeはどう使い分ける?記事作成・画像制作・調査で検証

STAGE 16

Pyxelでよく使う関数チートシート

ここまで登場した命令を中心に、開発中に手元で見返せるチートシートとしてまとめました。ブックマークしておくと、コードを書くときに便利です。

分類 関数 役割
初期化 pyxel.init(w, h) 画面の幅・高さなどを指定してウィンドウを作成
実行 pyxel.run(update, draw) update→drawのゲームループを開始
描画 pyxel.cls(col) 画面を指定色で塗りつぶしてクリア
描画 pyxel.rect(x, y, w, h, col) 塗りつぶした四角形を描く
描画 pyxel.text(x, y, s, col) 文字列を表示する
描画 pyxel.blt(x, y, img, u, v, w, h, colkey) イメージバンクの絵を画面に貼りつける
描画 pyxel.bltm(x, y, tm, u, v, w, h) タイルマップをまとめて描画
入力 pyxel.btn(key) 押されている間ずっとTrue
入力 pyxel.btnp(key) 押された瞬間だけTrue
入力 pyxel.mouse_x / mouse_y マウスカーソルの座標を取得
pyxel.play(ch, snd) 指定チャンネルでサウンドを再生
ファイル pyxel.load("file.pyxres") Pyxel Editorで作った素材ファイルを読み込む

すべての関数の詳細な仕様は、Pyxel公式ドキュメント(日本語版)のAPIリファレンスで随時確認できます。

STAGE 17

よくある質問

Pyxelはプログラミング未経験でも使えますか?

Python自体が初めての場合は、変数・if文・for文といった基本文法を先に軽くさわっておくと理解がスムーズです。とはいえPyxelの命令自体は非常にシンプルなので、簡単な入門書やチュートリアルを一つ終えた程度の知識があれば、この記事の内容には十分ついていけます。

作ったゲームをスマホやブラウザで遊べるようにできますか?

Pyxelには、作品をWeb(ブラウザ)用に書き出す機能が用意されており、HTMLファイルとして出力すればブラウザ上で遊べる形にできます。手順の詳細は公式ドキュメントのWeb出力の項目を参照してください。

PyxelとPygame、結局どちらを選べばいいですか?

「まずは手早く1本完成させたい」「レトロな見た目を楽しみたい」ならPyxel、「解像度や色数の制限なく、幅広いジャンルを自由に作りたい」ならPygameが向いています。ステージ14の比較表もあわせて参考にしてください。

無料で商用利用してもよいのでしょうか?

PyxelはMITライセンスで公開されており、商用・非商用を問わず無料で利用できます。ただし配布する素材(絵・音楽など)に第三者の著作物を使う場合は、その素材側のライセンスを別途確認してください。

画面がカクついたり重くなったりするのはなぜですか?

敵や弾の数が増えすぎている、当たり判定の計算量が多すぎる、といった原因が多いです。ステージ13で紹介した「小さく分けて確認する」方法で、どの処理が重いのかを切り分けてみましょう。

🏆 STAGE CLEAR

Pyxelは、Pythonの知識を使って、あの頃のゲームの手ざわりを再現できる、小さくて自由なゲームエンジンです。updatedrawという2つの関数を用意するだけでゲームループが成立し、専用エディタを使えばドット絵・マップ・サウンドまで1つの流れで作れます。

当たり判定などは自分で組み立てる必要がありますが、そのぶん「ゲームがどう動いているか」を基礎から学べるのも、Pyxelならではの良さです。わからないところはAIチャットに相談しながら進めれば、一人でもつまずきにくくなります。

次に挑戦したい応用アイデア

  • アクションゲーム:タイルマップでステージを組み、敵AIやボス戦を追加してみる
  • 弾幕シューティング:大量の弾を管理しつつ、処理落ちしない工夫を考える
  • パズルゲーム:ブロックの移動・回転を実装して、落ち物ゲームに挑戦する
  • ミニRPG:タイルマップ+会話ウィンドウ+イベントで物語を作る
  • 通信対戦・ランキング:Pythonのネットワーク機能でスコアを共有する
  • AIとの共同制作:ストーリーやセリフのたたき台をAIに考えてもらい、自分の言葉で仕上げる

まずは今日のサンプルコードを少しだけ書きかえてみるところから。AIという頼れる相棒を借りつつ、自分だけのドット絵と音で、世界に1つのレトロゲームを育てていきましょう。


関連記事

特集記事

コメント

この記事へのコメントはありません。

TOP
CLOSE