処刑の処理が終わったら、今度は夜中の処理を実施します。
夜中の処理には「占い」「襲撃」「護衛」があるわけですが、どれから実装するのが良いんでしょうね。
とりあえず、護衛から見ていきましょう。
$Guard_Target = -1; $Guard_Index = -1; for($index = 0; $index < @Char_Alive_Index; $index++){ if( $Char_Cast[ $Char_Alive_Index[$index] ] eq "guard" ){ $Guard_Index = $Char_Alive_Index[$index]; last; } }
まずは狩人が生きているかどうかをチェックします。
Guard_Indexには狩人のキャラクター番号を保持させます。ループを回し、生きているキャラクターの番号からそのキャラクターが狩人かどうかを調べ、狩人であればその番号をセットします。
もしも狩人が生きていれば、Guard_Indexにはそのキャラクターの番号が、死んでいれば-1がセットされるわけですね。
狩人が生きている場合には、護衛対象(Guard_Target)を決定します。
if( $Guard_Index > -1 ){ if( $Exec_Guard[0] < 0 || $Exec_Guard[1] < 0 ){ @Char_Alive_Index_Temp = (); for($index = 0; $index < @Char_Alive_Index; $index++){ if( $Char_Alive_Index[$index] != $Guard_Index ){ push(@Char_Alive_Index_Temp, $Char_Alive_Index[$index]); } } $Guard_Target = $Char_Alive_Index_Temp[ int( rand( @Char_Alive_Index_Temp ) ) ]; }else{ if( $Char_Life[ $Exec_Guard[0] ] == 0 ){ $Guard_Target = $Exec_Guard[0]; }elsif( $Char_Life[ $Exec_Guard[1] ] == 0 ){ $Guard_Target = $Exec_Guard[1]; } } if( $Guard_Target > -1 ){ print LOGFILE "$Day_Count_Max<>85<>$Guard_Target<>$Time_Stamp\n"; } }
まず、狩人が護衛対象を選択していたかどうかを調べます。これは、Exec_Guardの値が-1かどうかをチェックすることで分かりますね。
もしも護衛対象を設定せずに夜になってしまっていた場合、狩人以外の生きているキャラクターからランダムに護衛対象を選択します。
次に、もしも護衛対象を(第一候補、第二候補として)設定している場合には第一候補が生きていればそちらを、死んでいる場合には第二候補を護衛するようにします。
最後に、護衛対象がちゃんと決まっていれば(Guard_Targetが-1でなければ)その決定をログファイルに書き出して終了です。