雨谷の日和

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

人狼BBS作成日記79

処刑の処理が終わったら、今度は夜中の処理を実施します。
夜中の処理には「占い」「襲撃」「護衛」があるわけですが、どれから実装するのが良いんでしょうね。
とりあえず、護衛から見ていきましょう。

  $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でなければ)その決定をログファイルに書き出して終了です。