[topic] 憂鬱な勇者
Posted feedbacks - OCaml
面白かったですー。
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 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | #!/usr/bin/env ocaml
#load "nums.cma";;
#load "unix.cma";;
open Big_int;;
let monster =
[|"焼きたてパン";"強いシャチホコ";"もんじゃ焼き一年生";
"怪人ホタテ男";"ニセ勇者";"逃げ足の早いアレ";"睡魔";
"煩悩";"愛らしい子犬の中の人";"恋するスズメバチ";
"勇敢なクマンバチ";"信じられない物";"勇者の師匠";
"浮遊する鎧";"怪盗ドボン";"闇の招き猫";
"誘惑のカスタードクリーム";"しょっぱすぎる籠手";
"カレー味の兜";"光沢だけは一流の盾";"若葉マークのモンスター";
"新緑の季節";"梅雨時の車両のニオイ";"暑すぎる夏";
"新宿らしき何か";"やたら発達したドーナツ";"育ちすぎたクマー";
"なごやかな雰囲気";"凍り付いた気配";"忍び寄る恐怖"|]
let skill =
[|"お豆腐の買い方";"鉛筆の買い方";"消しゴムの使い方";
"メモの取り方";"攻撃に使えないこともない呪文";
"裏町の歩き方";"森林浴";"珈琲の味";"しじみのみそ汁の作り方";
"回覧板の回し方";"郵便物の投函方法";"立ち話のコツ";"猫の呼び方";
"犬の呼び方";"カラスの呼び方";"鳩専用豆鉄砲";"秘密の趣味";
"速く走るコツ";"剣の使い方";"斧の使い方";
"まきわりで、まっきわりわり";"聖なる祈り";"孤独";
"涼しく過ごすコツ";"お洒落のコツ";"卵をふわっと焼く方法";
"ごはんの研ぎ方";"油汚れの対応方法";
"大人の振るまい";"Suicaの使い方"|]
let len_monster = Array.length monster
let len_skill = Array.length skill
let exp =
let tmp = ref (unit_big_int) in
Array.init 30 (fun i ->
tmp := (mult_int_big_int (i+1) !tmp);
string_of_big_int !tmp)
let form = format_of_string "\
*-----\n\
%sを倒した!\n\
%sの経験値を得た。\n\
勇者は%sレベルが上がった!\n\
勇者は、%sを覚えた。\n\n%!" ;;
let hero exp sec =
let len = Array.length exp in
for i = 0 to len-2 do
Printf.printf form
monster.(Random.int len_monster)
exp.(i)
(string_of_int (i+1) ^ "に")
skill.(Random.int len_skill);
Unix.sleep sec;
print_endline "\nそして、\n\
かくかくしかじかで、\
山あり谷ありの冒険が続いたが割愛。\n";
Unix.sleep sec;
done;
Printf.printf form
monster.(Random.int len_monster)
exp.(len-1) "、また、" "ふと虚しさ";;
hero exp 1;;
|


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 ]