工学じじいの縁側日記

工学じじいの縁側日記

引退間際の工学じじいがきままに、プログラミングやデバイス、工学について呟きます。

【python】pythonでゲームを作るって有りなのか真面目に考えた結果の選択肢

pythonでゲームを作るって有りなのか真面目に考えた結果の選択肢

f:id:gomta777:20191203004356j:plain

pythonで使えるゲームライブラリ

最近のゲーム界隈のプログラミングの流行として、ゲームエンジンてのがあります。有名なものだと、Unityとか、UnrealEngineとかですね。こいつらは、ライブラリというよりは、ゲーム向けの統合開発環境のようなイメージですね。昔は、フレームワークって言ったりもしたけど、とりあえずゲームフレームワークゲームエンジンってそんな明確な分類はしていないようです。
それに対して、ゲームに必要な画像の読み込みや表示、制御などのAPIを提供するのみのものを、ゲームライブラリと呼んでるっぽいですね。
python界隈ではゲームを作ろうとすると、フレームワークというよりはライブラリと呼ばれる分類のものを利用することになりそうです。


pythonで使えるゲームライブラリ

あちこちのページに書いてはありますがpythonで使えるゲームライブラリは主に以下のものがあります。



pygame

f:id:gomta777:20191202230350p:plain

ちょっと有名なゲームライブラリにSDLってやつがありまして、そいつをpythonでラッピングしたのがpygameってことになります。
XNAとか、enchant.jsとかよりは、優しくないですが、SDL自体はとてもメジャーなライブラリということになりますので、pythonでゲーム作ろうと思ったら、とりあえず一番手に上がってくるのではないでしょうか?

現在絶賛とん挫中のうちのテトリス作ってみた企画もpygameです。


初心者がpythonとpygameでテトリス風ゲームを作ってみた #03

youtubeを見るとサンプルが何個かあります。


Helicopter shoot em' up game made with Python and PyGame

ただ、なんだかんだ「ちゃんと」ゲームの形に仕上げて、1個のまとまったゲームとして使えそうだな?と納得するサンプルには出会えないなという印象です。

また、ほかの言語界隈では、SDL2が現在の主流のため、SDLベースのpygameはソフトウェアレンダリングだし、なんか処理が遅いなぁって感じのようです。

もう少しで、SDL2に対応した新バージョンが出るようです。
期待して待ちましょう。

公式サイト:
https://www.pygame.org/

日本語ドキュメント:
westplain.sakuraweb.com

インストール:

pip install pygame

PySDL2

f:id:gomta777:20191202230650p:plain

一時期pygameのテンションが下がりまくって、SDL2対応も見送りされて、これからはpySDL2がpygameの後継になるでしょって言われていたライブラリです。
python用に作られたゲームライブラリというよりは、pythonによるAPIラッパーという感じなので、必要なものは自分で作る意気込みが必要そうです。

これでちゃんとゲーム作ったよっていう記事がそんなにみあたりません。。。これぐらいですかね?

lukems.github.io


公式サイト:
pysdl2.readthedocs.io

インストール:

pip install pysdl2

pyglet

f:id:gomta777:20191202230845p:plain

ディ〇ニーのピンクの豚さんではないです。
マルチプラットフォームのウィンドウイング、マルチメディアライブラリです。ゲームにとどまらず、リッチなUIのアプリケーションの開発もターゲットにしており、フルスクリーンのアプリ製作も可能です。
 ウィンドウ制御、イベントハンドリング、OpenGLグラフィックス、画像と動画の読み込み、サウンドと音楽の再生をサポートしています。画像や、音楽のサポート形式も豊富で、様々な形式のものを読み込むことができます。
また、依存ライブラリがなく単独で動作するという特徴があります。

pygletで作ったminecraftクローンです。

www.youtube.com


公式ページ:
pyglet.readthedocs.io


インストール

pip install pyglet

panda3D

https://camo.githubusercontent.com/db79e6ff5d67eb944e41a5629f9cd9c43cc701c7/687474703a2f2f692e696d6775722e636f6d2f664438385a4d552e706e67

3Dでゲームを作るなら、これが本命でしょうか?
ゲームライブラリというよりは、冒頭に話したゲームフレームワークに属するようです。というのも、
「THE OPEN SOURCE FRAMEWORK FOR 3D RENDERING AND GAMES」
と、公式でうたってますもんね。そして、ゲームのみならず3DCGレンダリングフレームワークとしても機能するので、3DCGシーンの構築などにも役に立ちそうです。UnityやUE4にならぶとまでは言わないまでも、python環境でのフレームワークといえばpanda3Dになるのではないでしょうか?

Panda3Dサンプル:
www.youtube.com

公式ページ:
www.panda3d.org

インストール

pip install Panda3D

kivy

f:id:gomta777:20191202235100p:plain

pythonでゲーム作れないかな?ということで検索すると必ず出てくるのがkivyです。
kivy自体はゲームライブラリではありません。
NUI(Natural User Interface)構築のためのUIライブラリという位置づけで開発されています。マルチタッチイベントに対応しており、マウス、キーボード、TUIO、OS固有の広範な入力をサポートしています。OpenGL ES 2のVertext Buffer Objectとshadersを使用したグラフィックライブラリ、マルチタッチ対応のさまざまなウィジェット
、カスタムウィジェットを容易にデザインするための中間言語Kvを持つ、などの特徴があります。
pythonでアプリにGUIを導入しようと思うとコレって感じですかね?
そういう感じなので、日本語の資料も多く公式のドキュメントもほとんど日本語化されています。

pyky.github.io

ユーザーによる解説ページも非常に豊富ですので使いやすいかと思います。

描画や画像読み込みなどの機能も豊富で、それらkivyの持つ様々な機能を使ってゲームを作ることも可能です。

kivyゲームサンプル:
www.youtube.com

公式ページ:
kivy.org

インストール:

  • 最新のpipとwheelを持っていることを確認します:
python -m pip install --upgrade pip wheel setuptools
  • 依存関係をインストールします(gstreamer(120MB)が必要ない場合はスキップできます、 Kivy’s dependencies(Kivyの依存関係) を参照してください)
python -m pip install docutils pygments pypiwin32 kivy.deps.sdl2 kivy.deps.glew
python -m pip install kivy.deps.gstreamer
  • Python 3.5の場合には、glewの代わりに使用できるangleを追加でインストールできます:
python -m pip install kivy.deps.angle
  • Kivyをインストールします:
python -m pip install kivy

Pyxel

f:id:gomta777:20191203000604p:plain

何気に、今回一押しのライブラリです。

Pyxel (ピクセル) はPython向けのレトロゲームエンジンです。

使える色は16色のみ、同時に再生できる音は4音までなど、レトロゲーム機を意識したシンプルな仕様で、Pythonでドット絵スタイルのゲームづくりが気軽に楽しめます。

ファミコン世代にはたまらんこだわりを感じるゲームライブラリです。
ファンタジーコンソールを参考に作られており、昔の8ビット機のようなゲームの製作をターゲットにしています。

製作者が日本人なことと、じわじわ人気が出てきているので資料も増え続けています。
そして、ゲーム制作時に無駄に高機能なものを突き付けられ途方に暮れることもないです。まずは、このライブラリでじっくり本来の「ゲーム」ってなんだ?というところを学んでみるのに最適ではないでしょうか?

公式ページ:
pyxel/README.ja.md at master · kitao/pyxel · GitHub

インストール:

pip install -U pyxel

所感

足りないものは、何でも作ればいいじゃん、って人はSDL系のものを使うのもいいですが、やっぱり、初心者だし簡単にちょっと〇〇してみたいなぁみたいなときに使えるライブラリがなくて困ってましたが、これからはちょっと規定できるのかなって思います。
やたら、pygameおすすめされてますが、そのページをよく見てみてください。ゲーム作ってないんで(笑)
~してみた、で終わってるページ多くないですか?