さて、読み込んだデータを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 ); } } }
ええと、コードに対応した出力サブルーチンを呼び出しているだけですね。
もっとスマートに書かないと後々困るような気がしてきました。また、それはいずれ考えます。