「Pythonで作る2Dゲームグラフィックエンジン」本をリリースしました

# はじめに

「Pythonで作る2Dゲームグラフィックエンジン」という本を書きました。PDFの電子書籍です。
以下の BOOTH や技術書典 (技術書典17で販売予定) で購入出来ます。

[Pythonで作る2Dゲームグラフィックエンジン -スーパー〇リオ風ゲームを作る-(BOOTH)](https://mainichipython.booth.pm/items/6033205)

[Pythonで作る2Dゲームグラフィックエンジン -スーパー〇リオ風ゲームを作る-(技術書典)](https://techbookfest.org/product/ufuhAPK3dn1qepahQdciUU)

以下のYouTube動画では本の内容を紹介しています。

[「Pythonで作る2Dゲームグラフィックエンジン」本をリリースしました(YouTube)](https://youtu.be/7MnLolOZZKc)

以下のYouTube動画でゲームのデモを見る事ができます。(少しバージョンは古いです)
Windows 用の exe も置いてありますので、プログラムの動作確認や完成版を体験する事が出来ます。
PyInstaller でビルドしていますので、恐らくC++などのランタイムライブラリがなくても動くようになっているとは思います。

[スーパーマリオ風ゲームを作りました(YouTube)](https://youtu.be/6tteFIXFAgY)

# 対象読者

- Python の基礎を習得し、OpenGL の実践的な使用方法を学びたい方
- Python を使用して簡単な 2D アクションゲームを作成したい方
- 2D ゲームグラフィックエンジン開発の基礎を理解したい方
- 2D アクションゲーム開発の基礎を理解したい方

# 執筆動機

## OpenGL 実践勉強

OpenGL の勉強の目的の１つにゲーム開発のために使用するというのがありました。
初めは PythonMan も OpenGL を使用してゲームを作る方法が分かっていませんでした。
実際にゲームを作ってみて OpenGL を使用してゲームを作成する方法を理解できました。
本書を読む事で、どうやってキャラや背景を描画するかなどを理解できると思います。

## 作りたいゲームが見つかる

また、作りたいゲームを模索していた時期がありました。
YouTubeでたまたま見かけたマインクラフト風のマリオがありました。

[Level UP: Steve would be OP in Super Mario Bros.(YouTube)](https://www.youtube.com/watch?v=Yg6Aqs9CD94&list=LL&index=226&t=1s)

このゲームに感動し、同じゲームを作ってみたいと思ったのがスタートでした。
マイクラマリオと名付けて開発を開始しました。
Steve の 3D モデルを作る必要がありましたが、無料配布されていたものを利用できそうでした。
しかし、Blender でアニメーションを作る段階で一旦挫折し、モデル作成は後回しにしました。
また、YouTube 動画から 2D 画像を画面コピーで抽出してゲームも作り始めていましたが、何もない状態からいきなり作るには時間がかかりすぎるため、敷居が高すぎました。
しかし、ある程度は動くものが出来ていたので、スーパー〇リオに変更して書籍を執筆しました。

## OpenGL 本の3部作

さらに、OpenGL 入門の[基礎編]と[GUGPU エフェクト編] を執筆して、OpenGL の使い方の基本はある程度、本にまとめられたのですが、実践的な使い方を解説もしたいと思っていました。
それが、今回の本になります。
ですので、今回の 2D ゲームエンジン本が OpenGL 入門の３部作という位置づけで、OpenGL 入門シリーズの３作目として完結になります。

# 書籍内容

書籍内容は、主に次の２つです。

- OpenGL を使用した簡単な 2D ゲームグラフィックエンジンを作成する
- そのエンジンを使用した 2D アクションゲームの完成版を作成する

題材は、ファミコンで大ヒットした初代スーパー〇リオブラザーズというゲームにしましたが、2D ゲーム開発の基礎が詰まった一冊になったと自負しています。
Python でスクラッチからある程度本格的なゲームをステップバイステップで完成させるという本は、探しても他に見つからないと思います。
ある意味では、同人誌だからこそ実現できたと思っています。

具体的な内容としては、先ほど取り上げた YouTube 動画のタイムラプスを見てもらうと分かりますが、
一部を紹介すると次のような内容になっています。

- 背景の作り方
- 背景スクロール方法
- キャラのアニメーションや動かし方
- 敵とのインタラクション
- アイテム処理
- ゴールなどのアニメーション処理
- 音楽や効果音を鳴らす処理
 
# 書籍執筆は自己満足の世界

勝手に引用させて頂きますが、ある方が次のように述べています。

[技術同人誌のハッピーエンドは「出版社の編集者に見初められて商業出版！」だけとは限らないという話(note)](https://note.com/mochikoastech/n/n19871b9aba16)

引用:
『「本を書く」という行為は著者の稼働時間を考えるとあまり割に合わない（私が遅筆なだけかもしれないけど時給換算すると数十円みたいな世界で遠い目になる）ので、ただ儲けるためだけに技術書を書くなら普通にエンジニアとして働いた方が効率が良いと思います。』

PythonMan と違い、超売れっ子の方が時給数十円というのは本当だろうかと思ってしまいますが、PythonMan も概算してみましたが、PyOpenGL 入門[基礎編]はある程度売れたので、時給１００円～２００円くらいはあるのではないかと思っています。
しかし、改定を重ね時間を使えば使うほど、１００円かそれ以下になってくる可能性もあります。
PythonMan の概算は、割と適当な概算なので、正確性はないと思います。

他の方も言われていましたが、確かに会社員として働く方が圧倒的にお金になります。
PythonMan もそれを承知でやっていますが、やはり「自分の本を出してみたかった」とか、「勉強したものをアウトプットしたい」という趣味的な意味合いが大きいです。
少しでも小遣い稼ぎになればいいなという思いはもちろんあります。
しかし、作業自体があまりにも大変なので、今回が最後の執筆になる可能性もあります。

## 執筆期間

執筆期間は、エンジンやマイクラマリオの開発期間も含めて２年半の期間がかかりました。
今回は執筆というより、ゲームのデモ版を作ったり、章ごとの差分コードを作るのに非常に時間がかかりました。
スタート時期は、病気が再発して体調不良になり始めた時期でした。
もちろん何も進めていない期間もあって２年半ずっと作業をしていた訳ではありません。
あまり売れない可能性もありますので、時給換算すると、PyOpenGL 入門[基礎編]よりも低くなるかもしれません。

# おわりに

やっとやりたいことが、ひと段落ついたと感じています。
体調不良で仕事も辞めて、趣味でもひと段落ついたので、しっかり体調を回復させるフェーズに入ったと思っています。
パソコン作業がきついのですが、趣味がパソコンやプログラミングの勉強なので、何もしないという時期が耐えられるか分かりません。
しかし、長年体調不良で仕事をしてきたので、時間をかけてでも回復したいと思っています。

今後の方針ですが、今は当初の目的であったゲーム開発よりも 3D モデルに興味を持つようになりました。
出来れば、3D モデルをゲームに活かしたいと思っています。
具体的には、VRM や VRChat モデルに興味を持っています。
ゲームエンジンは Python ではなく、Unity を考えています。
この辺りの勉強した情報を今後は、書籍ではなく、note ブログや Qiita や YouTube 動画などで発信できればと思っています。
とにかく先の事は現時点では何も分かりませんが、今後も趣味として何らかの情報は発信していきたいと思っています。