俺もガンダムだ!
Twitterで任されたので簡単に書いてみたけど,意外に難しい.
module GNDrive def transam; end end class Gundam def initialize(meister) @meister = meister end end class Exia < Gundam include GNDrive end class Dynames < Gundam include GNDrive end class Kyrios < Gundam include GNDrive def transform; end end class Virtue < Gundam class Nadleeh < Gundam include GNDrive def trial; end end def initialize(meister) @self = Nadleeh.new(meister) end def purge @self end end class Meister def initialize(name, serif) @name = name @serif = serif end attr_reader :name, :serif end
で,こんな感じ.
exia = Exia.new(Meister.new('刹那', '俺がガンダムだ!')) dynames = Dynames.new(Meister.new('ロックオン', '目標を狙い打つぜ!')) kyrios = Kyrios.new(Meister.new('アレルヤ', 'セリフがないよ!')) virtue = Virtue.new(Meister.new('ティエリア', '万死に値する!'))
武器とかの情報がないので本当にベースしか書いてないのだけど,GNDriveがOOみたいに複数ある場合はこれだと厳しいかもしれない(GNDriveを構造体みたいなもので表現した方がいいかも?).ナドレのトライアルシステムに対しても,他のガンダムに通知する上手い方法が思いつかない.各クラスに対してオブザーバでも用意するべきかと思うけど,でもガンダムOOのアニメ内だと,その場のガンダムの影響範囲を絞れるようだし,少し工夫が必要か.
こういう設定をいかにコードに落とすかというのも,暇潰しにはいいかもしれない.今回はRubyだけど多重継承とかだとまた違ったアプローチが出来るかな.