まずは投票から実装してみます。一番簡単そうなので。
最初に、各キャラクター毎の投票設定を格納するための変数を用意しておきます。
@Char_Vote = ();
これに投票設定を読み込んでいくことになりますね。
読み込みルーチンは、以下のようにしてみました。
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_Tbl{'day'}; $Day_Count_Max = -1; while($line = <LOGFILE>){ $line =~ s/\r//g; ($Line_Day, $Line_Type, $Line_Char_Index, $Line_Time, @data) = split( /<>/, $line); if($Line_Type == 51){ $Char_Vote[$Line_Char_Index] = $data[0]; }elsif($Line_Type == 81){ push(@Char_Name, $data[0]); push(@Char_Icon, $data[1]); push(@Char_Vote, -1); } if($Day_Count_Max < $Line_Day){ $Day_Count_Max = $Line_Day; foreach $vote (@Char_Vote) { $vote = -1; } } push(@Msg_Line, $line); } if($Day_Count == -1){ $Day_Count = $Day_Count_Max; } close( LOGFILE ); } }
コードが51のデータについては、それを投票設定として別扱いにしてあります。
また、キャラクター登場(81)のデータが来たら、そのときにChar_Voteを-1で初期化しています。
日付が変わったときにはChar_Voteを再度-1で初期化しています。
これで、最終的には進行中の日付の投票設定だけがChar_Voteにセットされることになります。もちろん、未投票の場合はChar_Voteの値は-1になりますから、判別することができますね。
未投票の場合はどうすれば良いかちょっと考えてみたんですが、基本的にはランダムでの投票にしようかと思っています。いや、棄権扱いという手もあるんですが、そうするとゲームのバランスが微妙に変わってきてしまうのでよくよく考えないと不味いなぁとも思っています。