レトロゲームエンジン Pyxel でプログラミングを始めよう!

Pyxelの開発が一区切りしたので、改めて紹介記事を書いてみました。

[2020.4.4追記:最新版の紹介記事はこちらです]

Pyxelって何?

Pyxel(ピクセル)は、昔ながらのドット絵タイプのゲームを簡単に作れるレトロゲームエンジン」です。

f:id:tkitao:20181124185037p:plain

2018年7月30日にリリースされた、非常に新しいゲームエンジンなのですが、海外を中心に急速にユーザーが増えています。

github.com

プロジェクトはGitHubオープンソースとして公開されており、公開4日でGitHubデイリーランキングで全1億のプロジェクト中1位を獲得。ついでに作者である私もGoogleFacebookMicrosoft等の企業アカウントを含む3100万人の開発者ランキングで1位になっています。(1位の座は48時間持ちませんでしたが…)

f:id:tkitao:20181111224534p:plain:w400

f:id:tkitao:20181111224553p:plain:w400

GitHub上ではその後もスター数が増え続けており、現在は4000スターを超え、MonoGame (5400スター)、PlayCanvas (3900スター)等の老舗ゲームエンジンと肩を並べつつあります。

他にもたくさんゲームエンジンはあるのに、なぜPyxelはそこまで注目を集めているのでしょうか? 5つの特長(とおまけ1つ)をご紹介します。

特長① Pythonでプログラムできる

Pyxelの最大の特長はPythonでプログラミングできることです。

f:id:tkitao:20181124232335p:plain:w300

Pythonは、

  • シンプルで読みやすいコードが書けるため、初心者が学習するのに向いている
  • プログラム言語の中で非常に人気があり、開発者も多い
  • 機械学習向けのライブラリも充実しており、AI用途でも人気が上昇中

といった特長を持つ優れたプログラム言語ですが、実はその特長を活かしたゲームエンジンはそれほど多くありません。

Python向けゲームエンジンとしては、PygamePygletが有名なのですが、Pygameは機能が古く低速、Pygletは使い方が難しくドキュメントが少ないという課題があります。

PyxelはシンプルなAPIとモダンな設計を組み合わせることで、Pythonの手軽さや生産性を損なわずに誰でも楽しくゲーム開発できる、第3の選択肢を提供しています。

Pyxelのインストールも一般的なPythonパッケージと同様に、Pythonがインストールされた環境で、

pip install pyxel

とタイプするだけ完了です。(詳しいインストール方法はマニュアルをご参照ください)

特長② マルチプラットフォーム対応

Pythonマルチプラットフォームに対応した言語で、Pythonで作られているPyxelも同じくマルチプラットフォームに対応しています。

f:id:tkitao:20181124232412p:plain:w300

Pyxelで作成したゲームは、再コンパイル等の作業なしに、同じプログラムをそのままWindowsMacLinuxで動かすことができます。(ただし、まだLinuxは検証が十分ではなく、一部描画や音楽の再生がうまくいかない環境があります)

ちなみに作者である私も、動作確認を兼ねて、その日の気分でWindowとMacを切り替えながらPyxelの開発を行っています。

特長③ 覚えることが少ない

Pyxelはレトロゲームにフォーカスして機能を極力シンプルにすることで、簡単な命令(API)をいくつか覚えるだけでゲームプログラミングができるようになっています。

例えば、11種類の命令を覚えるだけで、すべての描画機能が使えるようになります。

https://github.com/kitao/pyxel/blob/master/pyxel/examples/screenshots/03_draw_api.gif?raw=true

また、5種類の命令を覚えるだけで、効果音や音楽の作成と再生ができるようになります。

https://github.com/kitao/pyxel/blob/master/pyxel/examples/screenshots/04_sound_api.gif?raw=true

その他、ゲームの初期化方法やキー入力の取得方法も非常にシンプルです。

以下はPyxelロゴを表示して、Qキーが押されたらアプリを終了させるプログラムの例です。

import pyxel


class App:
    def __init__(self):
        pyxel.init(160, 120, caption="Hello Pyxel")
        pyxel.image(0).load(0, 0, "assets/pyxel_logo_38x16.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.text(55, 41, "Hello, Pyxel!", pyxel.frame_count % 16)
        pyxel.blt(61, 66, 0, 0, 0, 38, 16)


App()

https://github.com/kitao/pyxel/blob/master/pyxel/examples/screenshots/01_hello_pyxel.gif?raw=true

Pyxelを使ったプログラミングが非常にシンプルで理解しやすいことがおわかりいただけたでしょうか。

特長④ 専用ツールが同梱されている

ゲーム開発はプログラムを書くだけでは完成しません。ゲームで使用する絵や音楽も必要となり、通常は外部のツールを使ってそれらの作成を行います。

一方、Pyxelには絵や音楽を作成するための専用ツールが同梱されており、Pyxelだけですぐにゲーム開発を始めることができます。

Pyxelインストール後、pyxeleditorとコマンド画面でタイプすると、以下のツールを使用することができます。

  • ドット絵を作成するイメージエディタ
  • イメージを並べて画面を作るタイルマップエディタ

https://github.com/kitao/pyxel/blob/master/pyxel/editor/screenshots/image_tilemap_editor.gif?raw=true

  • メロディーや効果音を作成するサウンドエディタ
  • サウンドを組み合わせて音楽を作るミュージックエディタ

https://github.com/kitao/pyxel/blob/master/pyxel/editor/screenshots/sound_music_editor.gif?raw=true

また、別のツールで作成したデータを読み込むことも可能です。

特長⑤ 無料で使える

PyxelはMITライセンスで公開されており、誰でも無料で使用することができます。

参考にウィキペディアMITライセンスの要約を転記しておきます。

  • このソフトウェアを誰でも無償で無制限に扱って良い。ただし、著作権表示および本許諾表示をソフトウェアのすべての複製または重要な部分に記載しなければならない
  • 作者または著作権者は、ソフトウェアに関してなんら責任を負わない

特長⑥? 作者が日本人

最後におまけの特長をもう1つ。Pyxelは日本人によって作られており、作者が書いた日本語マニュアルもあります。もちろん作者に日本語で質問することも可能です。

冒頭、海外で急速にユーザーが増えていると書きましたが、一方で日本での知名度はまだ全然といった状況です。

世界中で使われることは非常にうれしいのですが、日本でもユーザーが増えてくれるといいなとも思っておりますので、ぜひ応援よろしくお願いします!