モジュール式ゲームライブラリ

SFontのプログラムを書き直してくれた人が、俺のTwitterのつぶやきに反応してモジュール式のゲームライブラリにチャレンジしてくれた。
http://twitter.com/mirichi/status/16602971260
http://d.hatena.ne.jp/whiteleaf/20100621/1276961364
Ruby1.9.1以上とDXRubyで動作する。
これはだいたい考えていたものに近い。


もともとどんなコトを考えていたのかというと、
・ゲームオブジェクト用の基本クラス
・それに追加する、各種機能のモジュール
という構成で、基本クラスを継承して独自のクラスを作って、必要な機能をMix-inすることで、自分で書くコードは最低限に抑えることができるかもしれない、みたいな感じだ。
ゲームの骨格部分や、作ったオブジェクトの管理なんかも全部自動でやっちゃって、例えば描画用モジュールをincludeすれば勝手に描画するようになるし、衝突判定モジュールをincludeすれば自動で判定される。
細かい部分の設計はさておき、追加した機能によりフレームワークの各部分に自動的に組み込まれていく、そういうイメージ。


RubyのMix-inはメソッドを追加する。メソッドの宣言だけを追加するのはJavaインターフェイスだが、Mix-inはその実装も追加できる。一般的な印象では、クラスから呼び出す機能(メソッド)を追加する、という感じだが、それだったら呼ばなくても存在している分には問題ないからはじめっから入れとけやーとか思ってしまう。
単純にメソッドを追加するのではなく、例えばEnumrableみたいに、eachを呼ぶメソッドを追加する、すなわちコールバックすることを前提にした機能であれば、(設計がすっきりとかじゃなく、ユーザーの手間を減らす的な)価値が出てくる。いや、設計がすっきりしているのも最終的にはユーザーの手間を減らす効果があるが、もっと目先の、他には無い利点として。
んで更に、フレームワーク的なコードに勝手に登録して、そこから呼ばれるメソッドを追加するようにしたら、これはなかなか今までに無い感覚のライブラリができるんじゃなかろうか、と。


このような発想をつぶやく前に考えていたのが、
http://twitter.com/mirichi/status/16601952768
てな感じで、Mix-inをこういう形で利用すれば、ライブラリでもフレームワークでもなく、もっとごちゃっとした、不思議な融合体になるんじゃ、みたいな。
んでも、これはこれでRubyを活用したものではあるんだけど、もう少しイッちゃってるようなキちゃってるような、いっそのこと往復でイキキしているような仕様がブレンドされたらパンチの効いたものになりそうだ。
WebフレームワークにおけるRailsのような、他の言語ではなくRubyだからこそ出てくる発想。
となるとやっぱりメタプログラミングか。モジュール式ゲームライブラリにメタプログラミングブレンドしたらどうなるんだろう。
いや、これは既に構想とかアイデアとか、ヒラメキですらなく、ただ思ったことを書いているだけだ。どういう物になるのか想像すらできない。イメージがまったく無い。
でもなんか書いておけば、そこからピンときて「これだ!」とか思っちゃうような人が現れるかもしれない。
素人的発想ってそういうもんだし、そこから発想を得るのは無駄も多いがブレイクスルーになる可能性もあるのだ。
ならない可能性もあるけど。