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

在宅勤務、週末の外出自粛と、何かと家にいることが多くなりました。

厳しい状況が続きますが、まとまった時間を確保して、新しく何かを身に着けるにはいい機会と言えるかもしれません。

そこで、在宅の時間を活用して、Pythonの使い方やゲームプログラミングを覚えたいという方に向けて、最新版に対応したレトロゲームエンジンPyxelの紹介記事を再作成してみました。

古い紹介記事を読んで、以前のインストール方法を試して詰まっている方もたまに見かけますので、こちらの最新版の紹介記事を参考にしていただければと思います。

Pyxelとは

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

f:id:tkitao:20200404130512g:plain:w350

f:id:tkitao:20200404130558g:plain:w300

f:id:tkitao:20190903003152g:plain:w300

GitHubオープンソースとして公開されており、2018年7月30日のリリース後4日で、GitHubデイリーランキングで1億プロジェクト中1位を獲得。現在は6800スターを獲得し、GitHub歴代ゲームエンジントップ10入りしています。

github.com

現在も世界中でユーザーが増え続けており、公式マニュアルも日本語、英語に加え、中国語、韓国語、スペイン語ポルトガル語もボランティアの方々のご協力によりサポートされています。

Pyxelの特長

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

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

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

f:id:tkitao:20181124232335p:plain:w200

Pythonは、

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

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

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

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

Pyxelのインストールも、Windows環境であれば、Pythonインストール後にコマンド画面(PowerShellまたはDOSプロンプト)から

pip install -U pyxel

とタイプするだけ完了です。(注意:MacLinuxでは別途SDL2ライブラリのインストールが必要です。詳しくは日本語版マニュアルをご参照ください)

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

PyxelはPython同様マルチプラットフォームに対応しています。

f:id:tkitao:20181124232412p:plain:w200

Pyxelで作成したゲームは、再コンパイル等の作業なしに、同じプログラムをそのままWindowsMacLinuxで動かすことができます。

また、同梱されているpyxelpackagerツールにより、Pythonがインストールされていなくても動作可能な単体実行ファイルを作成することも可能です。

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

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

また、「クラスなんて使いたくない!」「ひたすらシンプルに絵を描きたい!」という場合は、show命令を使って、

import pyxel

data = [40, 70, 50, 20, 100, 50, 40, 20] 

pyxel.init(128, 128)

for i, d in enumerate(data):
    pyxel.rect(i * 14 + 10, 120 - d, 10, d, 8 + i) 

pyxel.line(0, 120, 127, 120, 7)

pyxel.show()

f:id:tkitao:20190901231534p:plain

のような書き方も可能です。

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

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

一方、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は日本人によって作られており、日本語マニュアルがあるだけでなく、作者に日本語で質問することも可能です。

すぐに返信できない場合もありますが、Pyxelに関する質問がありましたら、作者Twitterアカウントまでご連絡ください。

twitter.com

追記:日本語版Discordサーバーも作成してみました。こちらから参加できます。

discord.gg

終わりに

最後に一言。

TwitterYouTubeなどで「Pyxelでこんなゲームを作ったよ」と公開していただけると、作者としては非常に励みになります。

Pyxelには、Alt+1(Opt+1)でスクリーンショットを、Alt+3(Opt+3)でムービーを撮影する機能がついていますので、どしどし皆さんの作品を発表していただければうれしいです。

f:id:tkitao:20200404141626p:plain:w300