憂鬱な勇者 in ioLanguage
憂鬱な勇者というものがあるらしいので、ioLanguageで作ってみた。
参考:http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558、憂鬱な勇者とは - はてなキーワード
MelancholicValiant.io
utf-8に変換して、保存してください。
こちらの乱暴な環境では日本語が化けるので、一部英語にしています。
階乗計算を「level!」みたいに求めるところと、勇者のレベルが30に達すると、メソッドそのものを書き換えるってのがポイントか。何というか、若いころにはもう戻れない人生観をコードで表してみましたw
メッセージを出すところはAOP風に出来ないもんだろか。
//数値オブジェクトに階乗を返すスロットを追加 Number ! := method(if(self == 0, 1, self * (self - 1) !)) //ListオブジェクトにNilではない何かを返すスロットを追加 List anyOneNotNil := method(at(Random value(0,size-1) floor)) //モンスターのプロトタイプ Monster := Object clone do ( NAMES := list("焼きたてパン","強いシャチホコ","もんじゃ焼き一年生","怪人ホタテ男","ニセ勇者","逃げ足の早いアレ","睡魔","煩悩","愛らしい子犬の中の人","恋するスズメバチ","勇敢なクマンバチ","信じられない物","勇者の師匠","浮遊する鎧","怪盗ドボン","闇の招き猫","誘惑のカスタードクリーム","しょっぱすぎる籠手","カレー味の兜","光沢だけは一流の盾","若葉マークのモンスター","新緑の季節","梅雨時の車両のニオイ","暑すぎる夏","新宿らしき何か","やたら発達したドーナツ","育ちすぎたクマー","なごやかな雰囲気","凍り付いた気配","忍び寄る恐怖") SKILLS := list("お豆腐の買い方","鉛筆の買い方","消しゴムの使い方","メモの取り方","攻撃に使えないこともない呪文","裏町の歩き方","森林浴","珈琲の味","しじみのみそ汁の作り方","回覧板の回し方","郵便物の投函方法","立ち話のコツ","猫の呼び方","犬の呼び方","カラスの呼び方","鳩専用豆鉄砲","秘密の趣味","速く走るコツ","剣の使い方","斧の使い方","まきわりで、まっきわりわり","聖なる祈り","孤独","涼しく過ごすコツ","お洒落のコツ","卵をふわっと焼く方法","ごはんの研ぎ方","油汚れの対応方法","大人の振るまい","Suicaの使い方") level := 0 init := method( Monster level = level + 1 self name := NAMES anyOneNotNil self skill := SKILLS anyOneNotNil self exp := level! ) ) //勇者そのもの Valiant := Object clone do ( name := "Valiant" level := 1 exp := 0 skills := List clone getSkill := method (skill, self skills atInsert(0, skill) "#{self name} got skill #{skill}" interpolate println self ) getExp := method(exp, self exp = self exp + exp "#{self name} got #{exp} exp !" interpolate println self ) increaseLevel := method ( self level := level + 1 "level up to #{self level}!" interpolate println if (level == 30, self getSkill = method (skill, self skills atInsert(0, "vanity") "#{self name} got skill vanity" interpolate println self ) ) ) killedAMonster := method (aMonster, "#{self name} killed #{aMonster name} !" interpolate println self getExp(aMonster exp) self increaseLevel self getSkill(aMonster skill) self ) meetsANewMonster := method ( "*-----" println ANewMonster := Monster clone killedAMonster(ANewMonster) self ) //旅をする onJourney := method ( "And, the adventure continued on peaks and valleys in the such and such by so and so , but omit it." println meetsANewMonster self ) )
使い方
ioを起動して、以下のコマンドを打ちます。レベル上げは手動です。
- doFile("MelancholicValiant.io")
- Valiant onJourney
- Valiant onJourney
- Valiant onJourney
- Valiant onJourney...
そして空しさだけが残ります。
空しさの再確認は、「Valiant skills」からどうぞ。
個人的にはレベル160ぐらいで空しくなって、止めました。
参考に、乱暴なio環境構築 on win32
- http://homepage.mac.com/jamesrburgess/Stuff/からIo-2008-01-07.win32.zipを落とし、c直下に展開する。「c:\usr\local\...」という感じに。(ioのAddonLoaderのサーチパスの関係で。直せる人なら、適当でいい。はず。)
- コマンドプロンプトから、「cd c:\usr\local\bin」
- 続けて、「io」
で、iovmが起動するはずです。