みんなのPython勉強会でLTを行った内容を元に再構成しています。
内容としてはPyconJP2017の発表で削ったネタになります。
Kivy(Python)でどんなゲームが作れるかの説明と実際に作る際に参考になりそうなゲームのソースコードを載せています。
ゲームを作るメリット
よく言われるメリットは以下の感じです。
- アルゴリズムの勉強
- プログラミング言語の理解をみにつける
- コンピュータのしくみを理解する
- 比較的改良しやすい
- 自動操作などでAIの学習に使えるかも
また個人的にはゲームは画面などに結果が反映されるので学習意欲がわきやすいというものがあります。
代表的なゲームエンジンについて
おそらく日本で最もポピュラーなものは以下の3つだと思います。
優れた機能、充実した日本語訳のマニュアル、豊富なサンプルとアセットがあります
- Unity(C#)
- UnrealEngine4 (BulePrints/C++)
- Amazon Lumberyard (C++)
ただし個人的には画面のレイアウトなど覚えることも多いのでプログラミングに特化した学習をしたいという人には不向きかもしれません。
またゲームエンジンは他にもたくさんの種類がありcocos2d,Godot Engine,Game maker といったものもあります。
UnrealEnginePythonについて
UnrealEngine4をPythonで動かそうということをしている人もいます。
EuroPython2017でAAA GAMES WITH UNREAL ENGINE 4 AND PYTHONという公演内容で発表もされています。
- 開発元の会社でのEuroPython2017での発表紹介ページ
- EuroPython2017での発表動画(youtube)
- github:https://github.com/20tab/UnrealEnginePython
日本でも導入の仕方についての解説記事があります。
UnrealEnginePythonをちょっとだけ試す
Godot Engine のGD Scriptについて
フリーのゲームエンジンであるGodot Engineの開発言語の一つであるGD ScriptもPythonライクの形式で書けるそうです。
またこれとは別にPythonでの対応も進んでいるようです。C++のAPIをCythonを使用してアクセスするようです。EuroPython2017で公演もしています。
-
EuroPython2017での発表動画(youtube)
Pythonのゲームをつくるライブラリ
Pythonでゲームを作るライブラリはいくつか出ています。
以下がよく聞かれるものの一覧です。
- Pygame
- Kivy
- KivEnt
- Pyglet
- Renpy
- Tkinter
各ライブラリの紹介ですが、
Pythonでゲームを作るライブラリーに関してはPygameが一番ポピュラーかと思います。
日本でもたくさんの紹介がblogなどにあります。
Kivyに関しては省略します。
PygameとKivyはともにSDL2を介して動いているのでできることはあまり変わらないです。
といいますかKivyは以前のバージョンではpygameを介してSDL2を動かしていました。
KivEntはKivyの派生でKivyを元にしたゲームライブラリです。国内での使用例はおそらくないと思います
Pygletは使用したことがないのでよく分かってないので詳細はリンク先のwikipediaのページを見てください。
Renpyはノベルゲームを作成するライブラリーで海外でノベルゲームを作成する際はよく使用されているみたいです。
日本でも使用してゲームを作成されている方もいます。
TkinterはPythonをインストールする際についてくる標準ライブラリです。インストールが簡単なのでPythnでプログラミングの勉強をする際に使用されることがよくあるようです。ゲームで使用する場合いですと12歳からはじめる ゼロからの Pythonゲームプログラミング教室という書籍が出版されています。
Pythonで作れるゲームについて
- スーパーファミコンレベル
- 2Dカジュアルゲームの作成が多い
- 3Dは得意ではない
作れるゲームですがスーパーファミコン時代の2Dカジュアルゲームならできます。
昨今の3DのリアルタイムのFPSの様なゲームの作成は描画処理の問題があり難しいです。
Pygameでの参考書籍
Pygameに関しては日本語の書籍があります
- ゲームを作りながら楽しく学べるPythonプログラミング
(https://www.amazon.co.jp/dp/B06XRQS8PN/) - マインスイーパー、テトリスなどゲームのアルゴリズムの解説も載っています
ただしこの書籍、 オンデマンドプリントなので書店にはおかれてないです。
Amazonで印刷かKindleでの販売しか入手できません。
ゲームはアルゴリズム自体は変わらないのでそういう意味では中古で本や他の言語のゲームのチュートリアルみてもできるかと思います。
Kivyで作成できるゲームについて
- 国内では書籍/サイトともに完成したものがあまりない
- 海外では書籍でいくつか紹介されている
- 公式サイトのギャラリー(https://kivy.org/#gallery)でいくつか紹介されている。
公式サイトでは紹介されていないGithubで公開されているKivyで作成されたゲームを以下で紹介します。
暗記系
- https://github.com/sot-iris/AstronautTraining
- 表示された複数の数字を覚えて記入するゲーム
マインスイーパー
https://github.com/pipy/minesweeper
Python2系のみ動作
出来に難がある
2048
パターン1
Kivyのコアディベロッパーの Mathieu Virbelが開発
2048のクローン
そこそこ話題になった
パターン2
https://github.com/mvasilkov/kb/tree/master/6_2048
書籍(Kivy Blueprints)のサンプルコード
2048のクローン
Floppy Birdのクローン
KivyBird
https://github.com/mvasilkov/kb/tree/master/7_KivyBird
書籍(Kivy Blueprints)のサンプルコード
FlappyKivy
シューティングゲーム
日本の方が作成
https://torina.top/detail/308/
https://bitbucket.org/toritoritorina/kvgames
シューティングゲーム
書籍(Kivy Blueprints
)のサンプルコード
インベーダーゲーム
書籍(Kivy - Interactive Applications and Games in Python Second Edition)のサンプルコード
オセロ
Python2.7でのみ実行
Kv Languageで作成されていない
テトリス
1
テトリスはブロックの消去などのアルゴリズムの関係ですこし内容が難しいです
2
スタート画面や音楽もついている
Life game
Game Of Life in Kivy https://t.co/96i7Tag9CI @YouTubeさんから
— okazaki jun (@dario_okazaki) 2018年1月6日
日本の方でも作られた方がいるみたいです。
ブロック崩し