「憂鬱な勇者」を Squeak Smalltalk で


http://d.hatena.ne.jp/scinfaxi/20080527/1211919944 に触発されて、http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558 を Squeak Smalltalk で書いてみました。

| モンスターたち スキル群 最高レベル 経験値を得た旨 最終レベル到達の旨 割愛の旨 レベルが上がった旨 |

モンスターたち := #('焼きたてパン' '強いシャチホコ' 'もんじゃ焼き一年生' '怪人ホタテ男' 
'ニセ勇者' '逃げ足の早いアレ' '睡魔' '煩悩' '愛らしい子犬の中の人' '恋するスズメバチ' 
'勇敢なクマンバチ' '信じられない物' '勇者の師匠' '浮遊する鎧' '怪盗ドボン' '闇の招き猫' 
'誘惑のカスタードクリーム' 'しょっぱすぎる籠手' 'カレー味の兜' '光沢だけは一流の盾' 
'若葉マークのモンスター' '新緑の季節' '梅雨時の車両のニオイ' '暑すぎる夏' '新宿らしき何か' 
'やたら発達したドーナツ' '育ちすぎたクマー' 'なごやかな雰囲気' '凍り付いた気配' '忍び寄る恐怖').

スキル群 := #('お豆腐の買い方' '鉛筆の買い方' '消しゴムの使い方' 'メモの取り方' 
'攻撃に使えないこともない呪文' '裏町の歩き方' '森林浴' '珈琲の味' 'しじみのみそ汁の作り方' 
'回覧板の回し方' '郵便物の投函方法' '立ち話のコツ' '猫の呼び方' '犬の呼び方' 'カラスの呼び方' 
'鳩専用豆鉄砲' '秘密の趣味' '速く走るコツ' '剣の使い方' '斧の使い方' 
'まきわりで、まっきわりわり' '聖なる祈り' '孤独' '涼しく過ごすコツ' 'お洒落のコツ' 
'卵をふわっと焼く方法' 'ごはんの研ぎ方' '油汚れの対応方法' '大人の振るまい' 'Suicaの使い方' ).

経験値を得た旨 := '\*-----\{1}を倒した!\{2}の経験値を得た。' withCRs.
レベルが上がった旨 := '\勇者は{3}にレベルが上がった!\勇者は、{4}を覚えた。\' withCRs.
最終レベル到達の旨 := '\勇者は、また、レベルが上がった!\勇者は、ふと空しさを覚えた。\' withCRs.
割愛の旨 := '\\そして、\かくかくしかじかで、山あり谷ありの冒険が続いたが割愛。\\' withCRs.


World findATranscript: nil.
最高レベル := 30.
1 to: 最高レベル - 1 do: [:レベル |
    Transcript show: (経験値を得た旨, レベルが上がった旨
        format: {
            モンスターたち atRandom.
            レベル factorial.
            レベル.
            スキル群 atRandom}).
    (Delay forSeconds: 2) wait.
    Transcript show: 割愛の旨.
    (Delay forSeconds: 2) wait].

Transcript show: (経験値を得た旨, 最終レベル到達の旨
    format: {モンスターたち atRandom. 最高レベル factorial})


書くのに使ったのは自分用にカスタマイズした Squeak3.9 ですが、umejava さんが Squeak開発者版 として公開してくださっている「Squeak3.9-final-7075J」 「Squeak3.9-final-7067J*1(Squeak 3.9.1-7075ベース)」 でも動作することを確認しています(Modbook/MacBook 2.4GHz で、OS X 10.5 および Vista SP1 を使用)。


Squeak Smalltalk のインストールは、簡単にはつぎの手順で行なえます。

  • umejava さんの Squeak開発者版 ページから Squeak3.9.1-final-7075J.zip をダウンロード
  • 同じページから、組み込みクラス群のソース SqueakV39.sources.zip をダウンロード
  • http://squeakland.jp/developer/ から“ホストOS”用の Squeak VM をダウンロード
  • 以上を展開して、それぞれの内容を Squeak3.9J などと名付けたフォルダにまとめる
    • Squeak3.9.1-final-7075J.image
    • Squeak3.9.1-final-7075J.changes
    • SqueakV39.sources
    • Squeak 3.0.app(Win の場合は、Squeak.exe ã‚„ .dll )


Squeak3.9.1-final-7075J.image を Squeak VM(.app や .exe)にドロップインすると、Squeak 環境が起動します。スクリプトの実行はテキストを入力できる場所であればどこでもできますが、通常は、Squeak 環境のデスクトップに相当する領域をクリックしてポップアップするメニューから「開く…」→「ワークスペース」を選んで“書き捨て用メモ”ウインドウを呼び出して使います。上のスクリプトをコピー&ペーストしてから改めて command(Win では alt または ctrl) + a で全選択後、command (Win では alt または ctrl) + d で実行できます。

Squeak 環境を作業状態を保存せずに終了するには、デスクトップメニュー →「終了」→「いいえ」を選びます。


そのほか、Squeak 環境でできることについて興味をお持ちの際は、umejava さんの「自由自在Squeakプログラミング」がたいへん参考になりますのでおすすめします。

自由自在Squeakプログラミング

自由自在Squeakプログラミング



Squeak Smalltalk の宣伝だけでは気が引けるので、上の Smalltalk スクリプトとほぼ同じことをする Ruby 向けの逆移植版も。

#!/usr/bin/ruby -Ku

class Integer; def fact; self < 2 ? self : self * (self - 1).fact end end
class Array; def at_rand; self[rand(size)] end end

モンスターたち = ["焼きたてパン", "強いシャチホコ", "もんじゃ焼き一年生", "怪人ホタテ男",
"ニセ勇者", "逃げ足の早いアレ", "睡魔", "煩悩", "愛らしい子犬の中の人", "恋するスズメバチ",
"勇敢なクマンバチ", "信じられない物", "勇者の師匠", "浮遊する鎧", "怪盗ドボン", "闇の招き猫",
"誘惑のカスタードクリーム", "しょっぱすぎる籠手", "カレー味の兜", "光沢だけは一流の盾",
"若葉マークのモンスター", "新緑の季節", "梅雨時の車両のニオイ", "暑すぎる夏", "新宿らしき何か",
"やたら発達したドーナツ", "育ちすぎたクマー", "なごやかな雰囲気", "凍り付いた気配", "忍び寄る恐怖"]

スキル群 = ["お豆腐の買い方", "鉛筆の買い方", "消しゴムの使い方", "メモの取り方",
"攻撃に使えないこともない呪文", "裏町の歩き方", "森林浴", "珈琲の味", "しじみのみそ汁の作り方",
"回覧板の回し方", "郵便物の投函方法", "立ち話のコツ", "猫の呼び方", "犬の呼び方", "カラスの呼び方",
"鳩専用豆鉄砲", "秘密の趣味", "速く走るコツ", "剣の使い方", "斧の使い方",
"まきわりで、まっきわりわり", "聖なる祈り", "孤独", "涼しく過ごすコツ", "お洒落のコツ",
"卵をふわっと焼く方法", "ごはんの研ぎ方", "油汚れの対応方法", "大人の振るまい", "Suicaの使い方" ]

最高レベル = 30
(1..(最高レベル - 1)).each{ |レベル|
  print "\n*-----\n#{モンスターたち.at_rand}を倒した!\n#{レベル.fact}の経験値を得た。"
  print "\n勇者は#{レベル}にレベルが上がった!\n勇者は、#{スキル群.at_rand}を覚えた。\n"
  sleep 2
  print "\n\nそして、\nかくかくしかじかで、山あり谷ありの冒険が続いたが割愛。\n\n"
  sleep 2
}

print "\n*-----\n#{モンスターたち.at_rand}を倒した!\n#{最高レベル.fact}の経験値を得た。"
print "\n勇者は、また、レベルが上がった!\n勇者は、ふと空しさを覚えた。\n" 

*1:Squeak3.9.1-final-7075J…の間違いですよね? > umejava さん ←修正していただきました。ありがとうございます。