雨谷の日和

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

人狼BBS作成日記35

さて、日付を渡す方法はとりあえずGETを使うことにします。
ページのリンクとして、以下のようなURLを使えば良いでしょう。

http://www.hoge.jp/jinro.cgi?day=1

上記であれば1日目のログを表示させるという感じです。
ただ、それだけだと、もしもdayパラメータが送られてこなかった場合に困りますから、その場合のデフォルトの数値を決めておくのが無難でしょう。
通常、最新のログを見ることが多いはずですから、最新の日付をデフォルトとすべきかと思います。
が、そうすると何日目が今の時点での最新なのかを、何らかの方法で判別しないといけないわけですが……。
とりあえず、ログの一行目、村のデータの部分に最新日の項目を追加してみることにします。
以下のようになるでしょう。

人狼探してみるテスト村<>3<>3<>../resource/title.png<>../resource/jinro.css
ギコ<>../resource/gico.png
しぃ<>../resource/she.png
モナー<>../resource/mona.png
1<>80<><>15:05<>人狼1人、占い師1人、村人1人がいるようです。
1<>01<>0<>15:07<>人狼なんざ信じねぇぞ。
1<>11<>0<>15:09<>オレが狼様だけどナー……。
1<>01<>1<>15:25<>人狼だなんて、怖いわ。<br>食べられちゃうのかしら。<br><br>ダッコ>ギコ
1<>50<>0<>15:26<>しぃを襲います。
1<>01<>2<>15:28<>おいらがみんなを護るモナー。<br>安心するモナー。
1<>50<>2<>15:33<>ギコを占います。
2<>80<><>16:00<>翌日、しぃが無残な姿で発見された。
2<>05<>1<>16:35<>死んじゃった、のかしら。もうちょっとお話したかったな。
2<>01<>2<>16:37<>報告します。おいらが占い師です。昨日はギコさんを占いました。彼は人狼です。
2<>11<>0<>17:09<>まぢかYO!もうバレちまったYO!
2<>01<>0<>17:11<>モナーさん、それは信じられませんね。私は私が村人だということを知っています。<br>貴方こそ狼じゃないんですか?ゴルァ。
3<>80<><>18:20<>投票の結果、ギコが処刑されました。
3<>80<><>18:20<>人狼を退治しました。村人の勝利です。
3<>01<>1<>18:25<>ギコさんが人狼だったんですね。食べられちゃったけど、勝ててよかったです。
3<>01<>2<>18:26<>今回は運が良かったですね。
3<>01<>0<>18:30<>あ〜、もうちょっと長生きしたかったかな。

ついでに村の名前も追加してありますが、その他の部分は基本的に同じです。
ログファイルの読み込み部分は、以下のように変えました。

sub FILEIN_MSG {
  if( open( LOGFILE, "<./msg.txt" ) ){
    flock( LOGFILE, 1 );
    ($Vil_Name, $Char_Count, $Day_Count_Max, $Vil_Img, $Vil_Css) = split( /<>/, <LOGFILE>);
    if( $Query_Tbl{'day'} ){
      $Day_Count = $Query_Tbl{'day'};
    }else{
      $Day_Count = $Day_Count_Max;
    }
    for($index = 0 ; $index < $Char_Count; $index++ ){
      $Char_Data[$index] = <LOGFILE>;
    }
    $index = 0;
    while($temp = <LOGFILE>){
      ($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time, $Msg_Text) = split( /<>/, $temp);
      if($Msg_Date == $Day_Count){
        $Msg_Data[$index++] = $temp;
      }
    }
    close( LOGFILE );
  }
}

基本的にはQuery_Tblのdayの値をDay_Countとして使っていますが、Query_Tblのdayの値が空の場合には一行目で読み込んだDay_Count_Maxを、Day_Countとして使うようにしています。
また、HTML出力の部分には、以下のように日付へのリンクの出力を追加します。

for($index = 1; $index <= $Day_Count_Max; $index++){
  if($index == $Day_Count){
    print "<li class=\"daydisp\">$index日目</li>";
  }else{
    print "<li class=\"daylink\"><a href=\"$Cgi_Main?day=$index\">$index日目</a></li>";
  }
}

Day_Count_Maxの値だけループを回し、Day_Countの時は単なる表示を、それ以外の日付の時にはその日付へのリンクを出力するようにしています。
これで、日付ごとのログの表示ができるようになるはずです。次回はその処理っぷりを確認してみることにします。