FrontPage 新規 編集 差分 一覧 ソース 検索 ヘルプ RSS ログイン

御神籤のソース

おみくじが欲しい、と言われたので初心に戻って一つ。

此処見てるような人には本当にどうでも良さそうなのだけどまぁ忘備録ってことで。

!!とりあえず
まず即興で書いてみた。
 print qw[大吉 中吉 吉 末吉 凶 大凶][int(rand 6)];
で、ちょっと考える。多分大概のサンプルはこうなってるのかな。
 @mikuji = ('大吉','中吉','吉','末吉','凶','大凶');
 $num = int(rand 6)
 print $mikuji[$num];
でもどうせなら
 print $mikuji[int(rand @mikuji)];
のほうが変更に強いし。となると
 @mikuji = ('大吉','中吉','吉','末吉','凶','大凶');
 print $mikuji[int(rand @mikuji)];
になるのか。これなら項目増やしても大丈夫。
無名配列だと配列の個数が取得できないのがネックだなぁ。

!!運勢ごとにメッセージを出す
んで運勢ごとにメッセージを出す場合はどうだろう。
 @mikuji = ('大吉\tだいきち','中吉\tちゅうきち','吉\tきち','末吉\tすえきち','凶\きょう','大凶\tだいきょう');
 ($unsei,$mes) = split(/\t/,$mikuji[int(rand @mikuji)]);
こんな感じかな。ハッシュを使うと無駄に冗長になりそうだし。一つの運勢で複数のメッセージ、とかも面倒そうだ。

!!確率を偏らせてみる
思わず
 $num = int(rand 10)+1; $mikuji = '大吉' if ($num <= 5); (以下略)
とかやりそうになってしまったのだけども
 @mikuji = ('大吉','大吉','大吉','大吉','大吉','中吉','吉','末吉','凶','大凶');
 print $mikuji[int(rand @mikuji)];
みたいな感じに配列の個数変えるだけでいいんだよなぁ、、、

!!おまけ
オブジェクト指向で書いてみる
 package Mikuji;
  sub new{
   my($class,$mikuji_file)=($_[0],$_[1]);
   bless { file => $mikuji_file },$class;
  }
  sub uranai{
   my$class = shift; my(@mikuji,$unsei,$mes);
   open(DATA,"<$class->{file}");
   @mikuji = <DATA>;
   ($unsei,$mes) = split(/\t/,$mikuji[int(rand @mikuji)]);
  }

使いかた
*御神籤用のデータファイルを用意する(一行に一項目、運勢\tメッセージという形で記述)
*$q = new Mikuji($mikuji_file); $mikuji_fileは上で用意したデータファイル名
*($unsei,$mes) = $q->uranai; 結果が返ってくる

まぁ意味のないシロモノですが(´ー`;)

wantarrayとかで結果を運勢のみとかにすると面白かったかもしれなひ

てゆーか@mikuji = <DATA>;がなぁ、、、うぅ

----
*「@mikuji = <DATA>」は、IO::Fileを使えばよいのでは?ところにより使えませんけど、起動遅くなりますけど^^;; - なるせ (2003年08月30日 05時43分16秒)
*ドキュメントが死んでてミレナイのですがIO::Fileって結局やってること同じじゃないかな?@mikuji = <DATA>;が気に食わないのは全部リストに叩き込むのがスマートじゃないと感じるからで - 和歌 (2003年09月01日 06時02分18秒)
*必要な部分だけ抜き出す〜、とか出来れば良いのだけれども・・・うーん - 和歌 (2003年09月01日 06時03分57秒)
*まずs/Package/package/g。あぁ、そういう意味ですか。任意の行を読むのは確かにどちらも無理ですな。とゆかnewの時点でオブジェクトに、ファイル名を格納するのでなく、リストを格納するようにすべきかと。print($q->urana[0]).($q->urana[0]);とかやる場合を考えるとね。 - なるせ (2003年09月01日 23時21分53秒)
*あ、あと、毎回splitは泥臭いかと。(['大吉','だいきーち','わーお],['中吉','ちゅうきち','おぉ'])とかは?>ハッシュを使うと無駄に冗長になりそうだし - なるせ (2003年09月02日 00時31分16秒)
*確かにnewでリストにしたほうが良いかも - 和歌 (2003年09月02日 04時54分48秒)
*(['大吉','だいきーち','わーお'],['中吉','ちゅうきち','おぉ'])の場合はどうやって保存するんだろう?デリミタ挟んで保存したのをopen後にsplit?それってあまり変わらない気がしなくもない - 和歌 (2003年09月02日 22時35分40秒)
*そうなるでしょうね。毎回splitするか、最初にまとめてsplitするか、の違いかな - なるせ (2003年09月03日 03時28分37秒)
*必要な分だけSplitする方が良いんじゃないかなぁと思った次第で<毎回〜 - 和歌 (2003年09月06日 04時10分49秒)
*効率は毎回正規表現が一番早いでしょうね。ただ、それだと美しくない、と(ぉ - なるせ (2003年09月06日 07時27分13秒)
{{comment}}

{{ref 00.gif}}
{{ref xhtml2.xml}}
{{attach}}

編集でUpしたファイルが見れます
「ref file,link」の「,link」ってとこを削除したら見れるようになった。。
バグの予感?
自力でバグ修正したので、ちゃんと使えるようになったっぽいです

{{ref_image 00.gif}}
添付画像表示のてすつ