今度は襲撃の処理を考えてみます。
$Attack_Target = -1; if( $Exec_Attack[0] < 0 || $Exec_Attack[1] < 0 ){ @Char_Alive_Index_Temp = (); for($index = 0; $index < @Char_Alive_Index; $index++){ if( $Char_Cast[ $Char_Alive_Index[$index] ] ne "wolf" ){ push(@Char_Alive_Index_Temp, $Char_Alive_Index[$index]); } } $Attack_Target = $Char_Alive_Index_Temp[ int( rand( @Char_Alive_Index_Temp ) ) ]; }else{ if( $Char_Life[ $Exec_Attack[0] ] == 0 ){ $Attack_Target = $Exec_Attack[0]; }elsif( $Char_Life[ $Exec_Attack[1] ] == 0 ){ $Attack_Target = $Exec_Attack[1]; } }
襲撃先の決定も、狩人の護衛先決定とほとんど同じ処理でOKです。ただし、狩人の場合には狩人が生存しているかどうかのチェックを先に行う必要がありましたが、襲撃の場合、それに該当する処理は必要ありません。人狼が全滅していたら、そこでゲームは終わっているはずだからです。
なお、襲撃先が設定されていなかった場合(第一候補か第二候補が未設定の-1だった場合)、襲撃先は生きているキャラクターの中で、人狼以外の人物からランダムに決定されるようにしてみました。
上記の処理が終わると、Attack_Targetに襲撃先のキャラクターの番号がセットされていることになります。