ゲームプログラミングというもの

案ずるより生むが易し?
http://d.hatena.ne.jp/nushio/20050529
M氏がHaskellグラディウスを開発した。
途中経過を逐一報告してもらっていた私としては、
最初の方の自機がへろへろと動くのを見せてもらって、
まぁ、どこまで出来るんですかなぁ〜?と思っていたら
いつの間にやらかなり完成度が高くなっていてびっくりしたりした。
スタッフロールには私の名前も入っているが、
多分、昔(今年の3月ごろに東京で徹夜で作ったあれ…)のコードが
使いまわされてるだけだと思う。


で、ここのところ私は何をしていたのかというと…。
ひたすら抽象的な方法にてゲームプログラミングというものを考えていた。
http://www.sampou.org/haskell/article/whyfp.html

関数型プロ グラミング言語は二つの新しいタイプの糊を供給する。
すなわち、高階関数と 遅延評価である。
これらの糊を用いて新しいわくわくするような方法でプログ ラムを簡単にモジュール化できる。

ここにも記載があるように、
Haskellならきっとほかの言語では到底実現不可能な抽象化が可能であると思い込み
その具体的な実現方法をじっと考えていた


が、今のところ実現できていない。
抽象的なことをずっと考えるのは苦痛だ。
全然集中できない。というわけで、ほとんど何もしていないのと変わらない。
うまいアイデアも出てこないし…。


一つ考えたのは「フレームごとに行われる計算」
というものをモナドにするということだ。
これはアイデアは良いのではないかと思われたが、
そのモナドが具体的にどんなデータになるべきかが分からなかったし、
また、それを決めることが出来たとしても、
実際に計算を行う部分をうまく実装する方法が分からなかった。


わくわくするような方法。それには本当に憧れる。
自分こそがゲームプログラミングを本当にわくわくするような方法で抽象化するんだ、
とかなんとか思っているうちにM氏が具体的なゲームを作ってしまった。
氏はHaskellでゲームを作った感想として、
その強力な型システムが単にステートマシンでゲームを作る場合にも
優秀なエラー検出器として有用であるとしている。
また、プログラムの正当性の証明もしやすいようだ。


それはそうかもしれない。
従来型プログラミングの延長としてHaskellを用いる場合にも
そのメリットは十二分にある。
そう思って私はこれまでHaskellを布教してきた。
…が、やっぱりもっと何かすごい抽象化方法があるはずなのだ。
パーザーでのパーザーコンビネータに魅せられた者としては
それを追い求めずにはいられない。


とはいえ、全然具体的な形が見えてこない。
こりゃだめだ…