【Pythonでゲームを作ろう!】Pyxelでレトロな2Dゲームを作ってみた!

Pyxelとは

ピクセルアートのレトロな2Dゲームが作れるPythonライブラリです。

・仕様
- Mac, Windows, Linux対応
- 同時に再生できる音は4音
- 使用できる色は16色のみ、定義可能な64サウンド
- Python3によるコード記述
- 256x256サイズ、3画像バンク
- 256x256サイズ、8タイルマップ
- 任意のサウンドを組み合わせ可能な8ミュージック
- キーボード、マウス、ゲームパッド
- 画像・サウンド編集ツール
pyxel/README.ja.md at master · kitao/pyxel · GitHub

ドット絵がうてるツールや、音楽を作成できるツールも入っており、ゼロからゲームを作ることができます。
シンプルな造りで初心者でも簡単にゲームを作ることができる仕様になっています。

Install

必要なもの:
- Python3.7 以上
- Homebrew

1
2
brew install python3 sdl2 sdl2_image
pip3 install -U pyxel

pyxel/README.ja.md at master · kitao/pyxel · GitHub

サンプルを動かしてみる

サンプルをインストール

1
install_pyxel_examples

ファイルを指定して実行

1
2
cd pyxel_examples
python3 01_hello_pyxel.py

実行結果:

レトロな雰囲気がたまらないですね!
ドット風のフォントもかわいいです。

使ってみた

ドキュメントを読みながら色々試してみました。
アセットはサンプルプロジェクトの物をお借りしています。

猫を表示させる

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import pyxel
 
class App:
    def __init__(self):
        pyxel.init(160, 120, caption="Hello Pyxel")
        pyxel.image(0).load(0, 0, "assets/cat_16x16.png")
        pyxel.run(self.update, self.draw)
 
    def update(self):
        if pyxel.btnp(pyxel.KEY_Q):
            pyxel.quit()
 
    def draw(self):
        pyxel.cls(0)
        pyxel.blt(75, 45, 0, 0, 0, 16, 16, 16)
 
App()

出力結果:

pixel.init(width, height, )

1
init(width, height, , [scale], [palette], [fps], [border_width], [border_color])
  • width、height: 画面サイズを指定(画面の最大の幅と高さは255)。
  • caption:ウィンドウのタイトルを指定
  • scale:表示倍率を指定
  • palette:パレット色を指定
  • fps:動作フレームレートを指定
  • border_width、border_color:画面外側のマージン幅と色を指定

pixel.run(update, draw)

Pyxelアプリを開始する関数。フレーム更新時にupdate関数、描画時にdraw関数を呼び出す。

猫の背景を透過

先ほど実行したサンプルでは猫の背景が透過していません。 pyxel.blt()の[colorkey]オプションを設定することで画像を透過することができます。

pyxel.blt(75, 45, 0, 0, 0, 16, 16, 5)

実行結果:

Player(猫ちゃん)を動かす

キーボード操作で左右に猫ちゃんを動かしてみます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import pyxel
 
class App:
    def __init__(self):
        pyxel.init(160, 120, caption="Hello Pyxel")
        pyxel.image(0).load(0, 0, "assets/cat_16x16.png")
 
        # Starting Point
        self.player_x = 72
        self.player_y = 16
 
        pyxel.run(self.update, self.draw)
 
    def update(self):
        if pyxel.btnp(pyxel.KEY_Q):
            pyxel.quit()
        self.update_player()
 
    def update_player(self):
        if pyxel.btn(pyxel.KEY_LEFT) or pyxel.btn(pyxel.GAMEPAD_1_LEFT):
            self.player_x = max(self.player_x - 2, 0)
 
        if pyxel.btn(pyxel.KEY_RIGHT) or pyxel.btn(pyxel.GAMEPAD_1_RIGHT):
            self.player_x = min(self.player_x + 2, pyxel.width - 16)
 
        if pyxel.btn(pyxel.KEY_UP) or pyxel.btn(pyxel.GAMEPAD_1_UP):
            self.player_y = max(self.player_y - 2, 0)
 
        if pyxel.btn(pyxel.KEY_DOWN) or pyxel.btn(pyxel.GAMEPAD_1_DOWN):
            self.player_y = min(self.player_y + 2, pyxel.height - 16)
 
 
    def draw(self):
        pyxel.cls(0)
 
        # 猫ちゃんを描写
        pyxel.blt(
            self.player_x,
            self.player_y,
            0,
            0,
            0,
            16,
            16,
            5,
        )
App()

実行結果:

所感

簡単にレトロでかわいいゲームを作ることができてしまいました!
ドットを打てるツールや、音楽を作るツールも内臓されているので引き続き使って見ようと思います。

Reference

PR11月1日にオフラインイベント・Developers.IO 東京開催します
PRもっと安く使いたい