読者です 読者をやめる 読者になる 読者になる

雨谷の日和

過去12年で1,600を超えるアニメの第1話だけは見続けた僕のお勧めアニメがハズレなはずがない

人狼BBS作成日記58

では、襲撃の場合を見てみます。 sub STDOUT_ATTACK_FORM { print "<div class=\"cell\"><div class=\"char\">\n"; print "<img class=\"char\" src=\"$Char_Icon[$Login_Index]\" width=\"50\""; print "height=\"50\" alt=\"$Char_Name[$Login_Index]\"></div>\n"; print "<div class=\"name\">人狼の襲撃</div>\n"; print "</div>

人狼BBS作成日記57

では、投票するための入力フォームを考えてみましょう。 以下のような感じになるでしょうか。 sub STDOUT_VOTE_FORM { print "<div class=\"cell\"><div class=\"char\">\n"; print "<img class=\"char\" src=\"$Char_Icon[$Login_Index]\" width=\"50\""; print " height=\"50\" alt=\"$Char_Name[$Login_Index]\"></div>\n"; print "<div class=\"name\">$Char_Name[$…</div></div>

人狼BBS作成日記56

ここまでの結果を置いておきます。 →ログファイル →ソースコード →実行結果(※実際には入力できないように機能をオフにしてあります) 表示だけはできても、まだ入力ができないのであまり意味はありませんね。 まあ、内部的なデータ保持はできているので、あ…

人狼BBS作成日記55

さて、読み込んだデータをHTMLに出力することを考えてみます。 まずは各データごとに、出力用のサブルーチンを作ってみます。 ほとんど発言の出力と同じなので、襲撃設定の場合のサブルーチンを見てみましょう。 sub STDOUT_ATTACK { ($Msg_Date, $Msg_Type,…

人狼BBS作成日記54

次は、襲撃と処刑の場合について考えてみます。 ただ、まだ日付更新の実装を全く考えていないので、とりあえずデータを読み込むことだけを考えてみます。 襲撃と処刑で変わる状態はキャラクターの生死フラグということになると思います。 ですから、そのため…

人狼BBS作成日記53

さて、次は襲撃/占い/護衛のデータの読み込みを考えてみます。 まず、以下のようにデータを格納する変数を用意しておきます。 @Exec_Attack = (-1, -1); @Exec_Fortune = (-1, -1); @Exec_Guard = (-1, -1);これらは第二候補まで設定できないといけないので…

人狼BBS作成日記52

まずは投票から実装してみます。一番簡単そうなので。 最初に、各キャラクター毎の投票設定を格納するための変数を用意しておきます。 @Char_Vote = ();これに投票設定を読み込んでいくことになりますね。 読み込みルーチンは、以下のようにしてみました。 s…

人狼BBS作成日記51

さて、コマンドの割り当てが終わったので、今度はそれぞれのコマンドのデータとしてどういうものを持っていればいいのかを考えます。 51:投票設定 これは投票先のキャラクターの番号を1つ持っておけば良いでしょう。以下のような感じになります。 2<>51<>0…

人狼BBS作成日記50

さて、人狼ゲームの通常ルールであれば、発言のほかに実行できるコマンドは以下のようなものがあります。 1、投票(生存者):投票設定、投票集計、処刑実行 2、襲撃(人狼):襲撃設定、襲撃実行、襲撃成功 3、占い(占い師):占い設定、占い実行 4、…

人狼BBS作成日記49

さて、いよいよ投票とかを実装してみたいと思います。 基本的な方針として、ログファイルは追記モードでログを増やして行くので、投票とかもそういうデータフォーマットで指定するように考えてみます。 今は発言用とシステムメッセージ用のコードしか無いの…

人狼BBS作成日記48

ということで、今までの変更結果を置いておきます。 →ログファイル →ソースコード →実行結果(※実際には入力できないように機能をオフにしてあります) データのフォーマットの変更がメインだったので、あまり見た目の変化はありませんね。 さて、次はこれに…

人狼BBS作成日記47

昨日のメインルーチンから呼び出されるサブルーチンを一応掲載します。 まずはヘッダーとフッター。 sub STDOUT_HEADER { print "Content-type: text/html\n\n"; print "<html><head><title>人狼BBS - $Vil_Name</title>\n"; print "<link rel=\"stylesheet\" type=\"text/css\" href=\"$Vil_Css\">\n"; print "</head><body class=\"mode01\">\n"; print "<center></center></body></html>

人狼BBS作成日記46

さて、HTMLの出力側も整理してみました。 各部分の出力をサブルーチン化して、メインの流れを分かりやすくすると、以下のようになりました。 sub STDOUT_HTML { &STDOUT_HEADER; &STDOUT_DAY_LIST( "header" ); for($index = 0 ; $index < @Msg_Line; $index…

人狼BBS作成日記45

データフォーマットを変更したので、読み込み部分にも改変を。 sub FILEIN_MSG { if( open( LOGFILE, "<./msg.txt" ) ){ flock( LOGFILE, 1 ); $line = <LOGFILE>; $line =~ s/\r//g; ($Vil_Name, $Vil_Img, $Vil_Css) = split( /<>/, $line); $Day_Count = $Query_Tb</logfile>…

人狼BBS作成日記44

さて、データフォーマットの方にも手を入れます。 追記モードだけでデータを作るのであれば、一行目に現時点の日付とキャラクター人数を入れておくのは不味いですね。 ということで、これらを排除しないといけません。 ただ、そうするとキャラクターのデータ…

人狼BBS作成日記43

さて、そろそろデータフォーマットとかの見直しを考えたいと思います。 まずは、ログインしたプレイヤーごとに見えるメッセージや出来る操作を切り分けしたいですね。 ということは、キャラクターのデータとして、メモリ上に役職や生死のフラグを持つ必要が…

人狼BBS作成日記42

例によってスクリプトとかを置いときます。 →ログファイル →ソースコード →実行結果(※実際には入力できないように機能をオフにしてあります) タイプごとのメッセージ(人狼の囁きとか霊話とか)でもほとんど同じように入力できてしまいますね。ただ、実際…

人狼BBS作成日記41

タイプ別の入力フォームは、hidden で埋め込んでいるmode パラメータを変えることで判別すれば良いだろう。 ただ、見た目的に色々と考えないと誤入力なども懸念されるから、そこら辺も工夫したいところです。 ということで、以下のようにしてみます。 sub ST…

人狼BBS作成日記40

実際のスクリプトとかを置いときますね。 →ログファイル →ソースコード →実行結果(※実際には入力できないように機能をオフにしてあります) これで基本的な入力方法まではできたことにします。あとは、投票とか襲撃設定とかをどのように入力させるかとか、…

人狼BBS作成日記39

今度はFILEOUT_MSG の説明を。 sub FILEOUT_MSG { $temp = "$Day_Count_Max<>$Query_Tbl{'mode'}<>0<>$Time_Stamp<>$Query_Tbl{'msg'}\n"; open( LOGFILE, ">>./msg.txt"); flock( LOGFILE, 2 ); print LOGFILE $temp; close( LOGFILE ); }一行目で、メモリ…

人狼BBS作成日記38

今日はSYSIN_TIME についてをまず。 入力した発言については、その書き込みの時間を記録しておくべきだと私は思っています。発言の流れの確認、間隔の確認は、人狼BBSでの一つの醍醐味だと思うからです。 ということで、SYSIN_TIME はその入力時間をTime_…

人狼BBS作成日記37

さて、今日からは発言のための入力方法の実装に入ることにします。 まずは、入力用のフォームをHTMLに追加しないといけませんね。こんな感じでしょうか。 print "<form method=\"POST\" action=\"$Cgi_Main\">\n"; print "<input type=\"hidden\" name=\"mode\" value=\"01\">\n"; print "<textarea cols=\"60\" rows=\"5\" name=\"msg\" wrap=\"off\"></textarea><br>\n"; print "</form>

人狼BBS作成日記36

ということで、いつものようにここまでで出来たものの実例を。 →ログファイル →ソースコード →実行結果 1〜3日目を表示することが出来るようになってます。メッセージ内容はでたらめなので、あまり気にしないで下さい。 一応、1〜3日目以外の不正な日付…

人狼BBS作成日記35

さて、日付を渡す方法はとりあえずGETを使うことにします。 ページのリンクとして、以下のようなURLを使えば良いでしょう。 http://www.hoge.jp/jinro.cgi?day=1上記であれば1日目のログを表示させるという感じです。 ただ、それだけだと、もしもdayパラメ…

人狼BBS作成日記34

ということで、今までのを合体させて、サブルーチンにするとこんな感じ? sub STDIN_QUERY_STRING { if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $query, $ENV{'CONTENT_LENGTH'} ); }else{ $query = $ENV{'QUERY_STRING'}; } @pairs = split( /&…

人狼BBS作成日記33

さて、パラメータを切り分けて使う際の注意点とともに、その為の処理を考えてみます。 まず、URL encoding の問題があります。 通常、ホームページのアドレスであるURLには、使える文字についての制限があります。半角英数字しか使えないというような感じの…

人狼BBS作成日記32

受け取ったパラメータは、先日も書いたように、以下のような形で渡されます。 date=20040929&name=Alice従って、今度はこれを使い易いように切り分けないといけないわけです。 ということで、以下のようにして連想配列に格納してみます。 @pairs = split( /&…

人狼BBS作成日記31

さて、ではGETやPOSTで送られてきたパラメータを、サーバ側のプログラムで受け取る場合にどうするかを見てみます。 まずはソースコードから。 if( $ENV{'REQUEST_METHOD'} eq "POST" ){ read( STDIN, $query, $ENV{'CONTENT_LENGTH'} ); }else{ $query = $EN…

人狼BBS作成日記30

ということで、次はクライアントからの入力を捌く方法を考えるわけです。 まずは、CGIの基礎のおさらいから。 HTTPは基本的に、サーバに置かれているデータをクライアントにダウンロードするだけの通信手順を規定したものでした。しかし、それだけだと何…

人狼BBS作成日記29

日付別に表示する場合のものを動かしてみます。 →ログファイル →ソースコード →実行結果:1日目、2日目 ソースコードの以下の部分が、表示する日付を指定しています。 $Day_Count = 2;上記だと、2日目を表示するわけですね。この数字を「1」にすれば、1…

人狼BBS作成日記28

日付をデータ行の先頭に付与したので、読み込み部分をそれに対応させてみましょう。 sub FILEIN_MSG{ if( open( LOGFILE, "<./msg.txt" ) ){ flock( LOGFILE, 1 ); ($Char_Count, $Vil_Img, $Vil_Css) = split( /<>/, <LOGFILE> ); for($index = 0 ; $index < $Char_C</logfile>…

人狼BBS作成日記27

さて、人狼BBSにはゲーム日付があります。 1日目、2日目という奴ですね。 ゲームの進行が1日単位ということで、それぞれの発言は別途に扱う必要があるわけです。 ということで、ログデータに日付を付与してみます。 こんな感じでしょうか。 3<>../resourc…

人狼BBS作成日記26

読み込みのフォーマットを変えたものをうpしておきます。 →ログファイル →ソースコード →実行結果 いやまあ、見た目は前のものと全く同じわけですが……。 次は、日付ごとに表示する方法を考えてみることにします。

人狼BBS作成日記25

あー、プログラムのソースコードを見るのも久しぶりですねー。 ということで、人狼BBS作成日記19では「出力側はほとんど同じなので、説明は割愛します」とか書きましたが、思い出しついでに説明します。 読み込んだ変数の格納の仕方が異なるので、出力…

人狼BBS作成日記24

社交型の職業別特性。 1、占い師 社交型の占い師は、周りから信じてもらえることが多い。ただ、占い先の選び方が非常にヌルいので、いつまでたっても人狼を見つけられないことも多い。うまくステルスした人狼の誘導にひっかかると、村を滅ぼしてしまう。 2…

人狼BBS作成日記23

論理型の職業別特性。 1、占い師 占い師になった論理型は、全く役に立たない。その論理の使いどころが無いからだ。そもそも占い師という存在自体が、論理型にとっての手がかりそのものなのだから、自分が占い師になってしまった論理型は途方に暮れる他無い…

人狼BBS作成日記22

今度は推理型の職業別特性。 1、占い師 推理型の占い師は、村人の意見に従う傾向がある。状況証拠的に、自分に不利になるようなことはほとんどしない。占いのヒットは村人次第になるので、白確定がどんどん増える傾向にある。信じられやすく、最も無難な占…

人狼BBS作成日記21

直感型の職業別特性とか。 1、占い師 序盤でぽんぽんと人狼を引き当てる恐ろしい占い師になる。でも、誰にも信じてもらえない。「なんであの人を占ったの?」という問いに「勘だよ勘」とか返すから。大抵、狂人の偽占い師の方が信じられて、途中で吊られた…

人狼BBS作成日記20

作成日記は厳密にはお休みなので、人狼BBSでのプレイヤーに関する考察でも書いときます。 私は、人狼プレイヤーを以下の4タイプに分類して、行動予測をしています。 1、直感型 直感直感で、情報を切り分けていくタイプですね。判断が早く、情報の少ない序…

人狼BBS作成日記19

昨日のようなフォーマットにログファイルを変更したので、読み込み部分を変えてみます。 こんな感じ。 sub FILEIN_MSG{ if( open( LOGFILE, "<./msg.txt" ) ){ flock( LOGFILE, 1 ); ($Char_Count, $Vil_Img, $Vil_Css) = split( /<>/, <LOGFILE>); for($index = 0 ; </logfile>…

人狼BBS作成日記18

さて、昨日までのログファイルのフォーマットを見ると、かなり無駄が多いことが分かります。 そもそも、キャラクターの名前と画像URLを各行に持たせるなんて有り得ないですよね。 ということで、キャラクターデータをメッセージデータの前に独立させてみます…

人狼BBS作成日記17

ということで、今までに書いてきたものをまとめるとこんな感じに。 →ログファイル →ソースコード →実行結果 動いてますね。とりあえずこれはこれでおっけー。

人狼BBS作成日記16

@FileInに読み込んだデータを順に取り出して、出力するソースコードを書いてみます。 まずは、読み込んだ行数分、ループさせます。 for($msgcnt = 0 ; $msgcnt < @FileIn; $msgcnt++ ){ &STDOUT_MSG( $msgcnt ); }STDOUT_MSGというのは、メッセージを標準出…

人狼BBS作成日記15

さて、昨日のログファイルを読み込むにはどうすればいいかを見てみます。 基本的には、「ファイルを開く」→「ファイルを書き込みロックする」→「行ごとに変数に格納」→「ファイルを閉じる(同時にロック解除)」ということを行うわけですね。 以下のようにな…

人狼BBS作成日記14

さて、今度はログファイルの形式を考えないといけないでしょう。 とりあえず、前に作ったHTMLの内容から、個々の発言を組み立てるのに必要なパラメータを抜き出すと「発言種別(村人、人狼……etc)」「キャラクター名」「キャラクターアイコンURI」「発言時間…

人狼BBS作成日記13

妖孤ルールについて。 そもそも、人狼vs人間という構図は分かりやすく、シンプルで、論理的に状況を詰めていきやすいために、かなり人間に有利という面があります。 例えば、プレイヤー数15人で共有者有り、人狼3人とすると、占い師が占うべき対象はデフ…

人狼BBS作成日記12

いつもお世話になっているesper氏から助言のコメントがありました。いつもありがとうございます。 こんにちは。 ヒアドキュメントとか使わないんですか?説明手順の問題?美学が許さない?でも、結構な手間のようにも思えます(キーマクロで作ったとしても)。…

人狼BBS作成日記11

さて、ではまず単純にHTMLをprintしていくだけのものをPerlで書いてみよう。→ソースコード ……ほんと、べたべたに出力しているだけですな。 これを実際に実行してみると、こうなります。→実行結果 一応、上手くいっているみたいですね。 次は、徐々にこの中の…

人狼BBS作成日記10

さてさて、一昨日に大体の色合いとかを決めたので、こんどはそれを元に見栄え関連の概要を固めていこうかなぁと思います。 一応、見栄え関係の方針など。 1、見栄えは外部スタイルシートで指定(divタグとspanタグをメインにclass属性で設定) 2、画像は、…

人狼BBS作成日記9

さて、メッセージの種類を考えてみると、一つ問題に気づきました。 例えば、参加中の人が妖精モードでログインできてしまうと、そこから天界に解脱して、すべてを知ってしまうということが出来ますね。 いやもちろん、そんなことをわざわざする人がいるとは…