ゲーム作ってると色々な処理系が内在することになります。言語ばかり作ってる気分になるので楽しいのでご紹介します。
- 画像データは言語だ。
BMP,PNG,GIF,JPEG等のデータは仕様に従って画像が圧縮されています。エンコーダとデコーダがあるわけですが、パーサとシリアライザに見えちゃいます。 - 音楽データは言語だ。
音楽データにはWAVやMP3,OGGなどがありますけど言語ですよね。
MMLという音楽記述言語もありコンパイラがあったりする。MIDやVGMの音楽演奏データはバイナリな音楽言語に思えます。昔の音楽再生ドライバはバイトコードを実行する仮想マシンに見えます。 - マップデータは言語だ。
Tiledというマップエディタを最近使ってますがXMLやJSONでデータが記述されているので好きに操作できて便利です。 - キャラクターを定義したスプライトも言語だ。
画像データを組み合わせたキャラクターデータも言語と考えられます。 - シューティングゲームのキャラ配置は言語だ。
2Dのシューティングゲームなどは一定時間がたつと敵が現れます。これは音楽データのようでもありますが、ループして5体を編隊として出したいとか、ランダムに3体出したいとかあるので言語になります。 - キャラの動きは言語だ。
BulletMLのようにシューティングゲームのキャラの動きは言語を作れます。 - ポリゴンのデータも言語だ。
さまざまなモデリングツールが対応しているデータ形式もまた言語です。 - GUIも言語だ。
ボタンの配置やら何やらを配置するデータは言語として定義できます。 - シーン移動も言語だ。
デモシーンからタイトルシーンに移動し、ランキング表示シーンに移動する。
スタートボタンでオプションシーンに移動したり、ゲームシーンにはいる。
ゲームオーバーになるとゲームオーバーシーンに移行する。クリアするとエンディングシーンに移動する。
こういったシーン移動も言語定義できます。 - これらの要素を組み合わせて動かし制御するのももちろんプログラミング言語という言語です。
プログラミング言語処理系を作るノウハウは、汎用的な言語を作らずとも様々なデータを扱う際に生きてきます。
多くの言語はJSONやXMLで定義できるのですがプログラミング言語だけは自由に扱えないのが悔しいと思う今日このごろです。