まずは投票の集計から見ていきましょう。
こんな感じになるでしょうか。
@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の該当キャラクターの被投票数をカウントアップします。
以上で集計は終わりです。