[topic] 憂鬱な勇者
Posted feedbacks - Common Lisp
言語の特徴にあわせてということで、Lisp といえばマクロなのでしょうが、使い道が浮かびませんでした。format と loop もまあ特徴といってもいいかなということで、この二つを軸に。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #-clisp (defun ! (n) (if (zerop n) 1 (* n (! (1- n)))))
(defconstant +monsters+
#("焼きたてパン" "強いシャチホコ" "もんじゃ焼き一年生" "怪人ホタテ男"
"ニセ勇者" "逃げ足の早いアレ" "睡魔" "煩悩" "愛らしい子犬の中の人"
"恋するスズメバチ" "勇敢なクマンバチ" "信じられない物" "勇者の師匠"
"浮遊する鎧" "怪盗ドボン" "闇の招き猫" "誘惑のカスタードクリーム"
"しょっぱすぎる籠手" "カレー味の兜" "光沢だけは一流の盾"
"若葉マークのモンスター" "新緑の季節" "梅雨時の車両のニオイ" "暑すぎる夏"
"新宿らしき何か" "やたら発達したドーナツ" "育ちすぎたクマー"
"なごやかな雰囲気" "凍り付いた気配" "忍び寄る恐怖"))
(defconstant +skills+
#("お豆腐の買い方" "鉛筆の買い方" "消しゴムの使い方" "メモの取り方"
"攻撃に使えないこともない呪文" "裏町の歩き方" "森林浴" "珈琲の味"
"しじみのみそ汁の作り方" "回覧板の回し方" "郵便物の投函方法"
"立ち話のコツ" "猫の呼び方" "犬の呼び方" "カラスの呼び方" "鳩専用豆鉄砲"
"秘密の趣味" "速く走るコツ" "剣の使い方" "斧の使い方"
"まきわりで、まっきわりわり" "聖なる祈り" "孤独" "涼しく過ごすコツ"
"お洒落のコツ" "卵をふわっと焼く方法" "ごはんの研ぎ方"
"油汚れの対応方法" "大人の振るまい" "Suicaの使い方"))
(defun level-up-message (level monster skill &optional melancholy-p)
(format t "~&*-----
~Aを倒した!
~D の経験値を得た。
勇者は~:[ ~D に~;、また、~]レベルが上がった!
勇者は、~:[~A~;ふと空しさ~]を覚えた。~%"
monster (! level)
melancholy-p level
melancholy-p skill))
(defun interval-message ()
(format t "~3%そして、
かくかくしかじかで、山あり谷ありの冒険が続いたが割愛。~2%"))
(loop for x from 1
as monster = (aref +monsters+ (random 30))
and skill = (aref +skills+ (random 30))
while (< x 30)
do (level-up-message x monster skill)
(interval-message)
finally (level-up-message x monster nil t))
|



rkanbe #6403() Rating1/1=1.00
RPG他の要素を全て省略してレベルアップだけするプログラム。自動またはユーザからのアクションによって、RPG風の経験値の獲得とレベルアップメッセージを出力します。
元祖のソースコードは Ruby で書かれています。
http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558
出力はほぼ原典どおりですが、それぞれの言語の特徴にあわせた処理の仕方で書いてみるとどうなるでしょうか(オブジェクト指向、再帰処理が書きやすい、など)。
これまでの言語別移植リストはこちらに掲載されています。
http://d.hatena.ne.jp/keyword/%cd%ab%dd%b5%a4%ca%cd%a6%bc%d4
[ reply ]