雨谷の日和

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

人狼BBS作成日記55

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

sub STDOUT_ATTACK {
  ($Msg_Date, $Msg_Type, $Msg_Char_Index, $Msg_Time, $Exec_Target1, $Exec_Target2) = split( /<>/, @_[0] );
  print "<div class=\"cell\"><div class=\"char\">\n";
  print "<img class=\"char\" src=\"$Char_Icon[$Msg_Char_Index]\"";
  print " width=\"50\" height=\"50\" alt=\"$Char_Name[$Msg_Char_Index]\"></div>\n";
  print "<div class=\"name\">$Char_Name[$Msg_Char_Index] $Mode_Name{'50'}";
  print "メッセージ [$Msg_Time]</div>\n";
  print "<div class=\"msg50\">$Char_Name[$Exec_Target1]を襲撃の第1候補、";
  print "$Char_Name[$Exec_Target2]を襲撃の第2候補にします。</div>";
  print "<br class=\"clear\"></div>\n";
  print "<br>\n";
}

データ行を引数として受け取り、それを各変数に分割するところまでは同じです。
ポイントはExec_Target1 とExec_Target2 ですね。ここに格納されたキャラクター番号を元に襲撃対象キャラクターの名前を逆引きし、第一候補と第二候補として表示させます。
占いの場合は第一候補のみ、処刑/襲撃はMsg_Char_Index が対象キャラになる点だけが違います。
HTMLの出力の全体としては、以下のような流れになると思います。

  foreach $line (@Msg_Line){
    ($Line_Day, $Line_Type) = split( /<>/, $line);
    if($Line_Day == $Day_Count){
      if($Line_Type == 80){
        &STDOUT_SYS( $line );
      }elsif($Line_Type == 81){
        &STDOUT_ENTRY( $line );
      }elsif($Line_Type == 82){
        &STDOUT_DEATH( $line );
      }elsif($Line_Type == 83){
        &STDOUT_KILL( $line );
      }elsif($Line_Type == 51){
        &STDOUT_VOTE( $line );
      }elsif($Line_Type == 52){
        &STDOUT_ATTACK( $line );
      }elsif($Line_Type == 53){
        &STDOUT_FORTUNE( $line );
      }elsif($Line_Type == 54){
        &STDOUT_GUARD( $line );
      }else{
        &STDOUT_MSG( $line );
      }
    }
  }

ええと、コードに対応した出力サブルーチンを呼び出しているだけですね。
もっとスマートに書かないと後々困るような気がしてきました。また、それはいずれ考えます。