雨谷の日和

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

人狼BBS作成日記76

まずは投票の集計から見ていきましょう。
こんな感じになるでしょうか。

  @Char_Vote_Temp = ();
  @Char_Alive_Index = ();
  for($index = 0; $index < @Char_Life; $index++){
    if($Char_Life[$index] == 0){
      push(@Char_Alive_Index, $index);
    }
    $Char_Vote_Temp[$index] = 0;
  }
  for($index = 0; $index < @Char_Alive_Index; $index++){
    if( $Char_Vote[ $Char_Alive_Index[$index] ] < 0 ){
      @Char_Alive_Index_Temp = ();
      for($index2 = 0; $index2 < @Char_Alive_Index; $index2++){
        if( $Char_Alive_Index[$index2] != $index ){
          push(@Char_Alive_Index_Temp, $Char_Alive_Index[$index2]);
        }
      }
      $Char_Vote[$index] = $Char_Alive_Index_Temp[ int( rand( @Char_Alive_Index_Temp ) ) ];
    }
    $Char_Vote_Temp[ $Char_Vote[ $Char_Alive_Index[$index] ] ]++;
  }

まず、キャラクター毎の被投票数を保持するための配列(Char_Vote_Temp)と、生きているキャラクターの番号だけを保持する配列(Char_Alive_Index)を用意します。
次にキャラクターの数だけループを回し、それらの配列の初期化をします。Char_Vote_Tempは全て0票に、Char_Alive_Indexには生きているキャラクターの番号だけをpushしていきます。


さて、前準備が出来たら次に集計です。今度はChar_Alive_Indexに格納された番号の数だけループを回します。
キャラクターの投票先が未設定の場合(Char_Voteが0より小さい場合)には、投票先を生きているキャラクターからランダムに選ぶことにします。Char_Alive_Index_Tempは生きているキャラクターの番号から投票者の番号を抜いたものの配列で、以下の部分がランダムによる投票の処理になっています。

$Char_Vote[$index] = $Char_Alive_Index_Temp[ int( rand( @Char_Alive_Index_Temp ) ) ];

rand関数が乱数発生の処理、それをint関数で整数に丸めて、Char_Alive_Index_Tempの中から投票先を決定しています。
投票先が決定したら、今度はそれを元にChar_Vote_Tempの該当キャラクターの被投票数をカウントアップします。


以上で集計は終わりです。