ttp://yaruonichijou.blog.fc2.com/blog-entry-5092.html
'skill' => array(
'skill_name' => 'dice_attack',
'skill_text' => '文章',
'skill_type' => 'attack_add_bonus', //攻撃ボーナス値に加算
'skill_rate' => '20', //20%で発動
'skill_damege_range' => '100', //1d100を加算
),
'skill' => array(
'skill_name' => 'dice_attack',
'skill_text' => '文章',
'skill_type' => 'attack_multiply_total', // $array['turn'.$i]['ply_atk']['total']に乗算する
'skill_rate' => '20', //20%で発動
'skill_damege_range' => '150', // %
),
'skill' => array(
'skill_name' => 'dice_attack',
'skill_text' => '文章',
'skill_type' => 'attack_add_dice', //ダイスを追加
'skill_rate' => '20', //20%で発動
'skill_damege_range' => '5', //ダイスを5追加
),
$ply = array(
'AI' => array(
'action' => 'attack',
),
'skill' => array(
'skill_name' => 'dice_attack',
'skill_text' => '文章',
'skill_type' => 'attack_add_bonus', //攻撃ボーナス値に加算
'skill_rate' => '20', //20%で発動
'skill_damege_range' => '100', //1d100を加算
),
'initiative' => array(
'ini_dice' => 2,
'ini_range' => 6,
'ini_bonus' => 4,
),
'unit_type' => 'fire',
'stats' => array(
'atk_dice' => 2,
'atk_range' => 6,
'atk_bonus' => 4,
'def_dice' => 1,
'def_range' => 6,
'def_bonus' => 4,
'rec_dice' => 1,
'rec_range' => 6,
'rec_bonus' => 4,
'max_hp' => 40,
),
'unit_name' => 'くまま',
);
$emy = array(
'AI' => array(
'action' => 'attack',
),
'skill' => array(
'skill_name' => 'dice_attack',
'skill_text' => '文章',
'skill_type' => 'attack_multiply_total', // ['total']に乗算する
'skill_rate' => '20', //20%で発動
'skill_damege_range' => '150', // %
),
'initiative' => array(
'ini_dice' => 2,
'ini_range' => 6,
'ini_bonus' => 4,
),
'unit_type' => 'water',
'stats' => array(
'atk_dice' => 2,
'atk_range' => 6,
'atk_bonus' => 4,
'def_dice' => 1,
'def_range' => 6,
'def_bonus' => 4,
'rec_dice' => 1,
'rec_range' => 6,
'rec_bonus' => 4,
'max_hp' => 40,
),
'unit_name' => 'てげ',
);
//規定戦闘回数
$max_turn = 10;
//全体の配列を作成
$array= array();
//最大HPの取得
$array['ply_max_hp'] = $ply['stats']['max_hp'];
$array['emy_max_hp'] = $emy['stats']['max_hp'];
//属性補正基本
$ply_damege_bonus = 100;
$ply_def_bonus = 100;
$emy_damege_bonus = 100;
$emy_def_bonus = 100;
//属性判定
if($ply['unit_type']='fire'){
switch($emy['unit_type']){
case 'wood': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 75; $emy_def_bonus = 75; break;
case 'water': $ply_damege_bonus = 75; $ply_def_bonus = 75; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}elseif($ply['unit_type']='water'){
switch($emy['unit_type']){
case 'fire': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 75; $emy_def_bonus = 75; break;
case 'thunder': $ply_damege_bonus = 75; $ply_def_bonus = 75; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}elseif($ply['unit_type']='wood'){
switch($emy['unit_type']){
case 'thunder': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 75; $emy_def_bonus = 75; break;
case 'fire': $ply_damege_bonus = 75; $ply_def_bonus = 75; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}elseif($ply['unit_type']='thunder'){
switch($emy['unit_type']){
case 'water': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 75; $emy_def_bonus = 75; break;
case 'wood': $ply_damege_bonus = 75; $ply_def_bonus = 75; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}elseif($ply['unit_type']='dark'){
switch($emy['unit_type']){
case 'light': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}elseif($ply['unit_type']='light'){
switch($emy['unit_type']){
case 'dark': $ply_damege_bonus = 125; $ply_def_bonus = 125; $emy_damege_bonus = 125; $emy_def_bonus = 125; break;
}
}
//ターン
for($i=1; $i <=$max_turn; $i++){
// 先制判定
$array['turn'.$i]['ini'] = ini_role($ply,$emy);
// プレイヤーの攻撃値
$array['turn'.$i]['ply_atk'] = dice_role($ply['stats']['atk_dice'],$ply['stats']['atk_range'],$ply['stats']['atk_bonus']);
// プレイヤーの防御値
$array['turn'.$i]['ply_def'] = dice_role($ply['stats']['def_dice'],$ply['stats']['def_range'],$ply['stats']['def_bonus']);
// エネミーの攻撃値
$array['turn'.$i]['emy_atk'] = dice_role($emy['stats']['atk_dice'],$emy['stats']['atk_range'],$emy['stats']['atk_bonus']);
// エネミーの防御値
$array['turn'.$i]['emy_def'] = dice_role($emy['stats']['def_dice'],$emy['stats']['def_range'],$emy['stats']['def_bonus']);
//1ターン目以外は以前のターンの現在HPを取得
if($i==1){
$ply_now_hp = $array['ply_max_hp'];
$emy_now_hp = $array['emy_max_hp'];
}else{
$ply_now_hp = $array['turn'.($i-1)]['ply_now_hp'];
$emy_now_hp = $array['turn'.($i-1)]['emy_now_hp'];
}
// ダメージ計算
//プレイヤーのダメージがエネミーの防御値を超えているかどうか
if($array['turn'.$i]['ply_atk']['total'] > $array['turn'.$i]['emy_def']['total']){
//超えていた場合ダメージ判定
//発動レート
$ply_skill_rate = mt_rand(1, 100);
$array['turn'.$i]['ply_skill_rate']=$ply_skill_rate;
//スキル発動判定
if($ply['skill']['skill_rate'] >= $ply_skill_rate){
switch($ply['skill']['skill_type']){
case 'attack_add_bonus': //攻撃ボーナス値に加算するタイプ
$ply_skill_damage = mt_rand(1,$ply['skill']['skill_damege_range']);
$array['turn'.$i]['ply_atk']['skill_damage'] = $ply_skill_damage;
$array['turn'.$i]['ply_atk']['total'] = $array['turn'.$i]['ply_atk']['total'] + $ply_skill_damage;
break;
case 'attack_multiply_total': //最終トータルに乗算する
$ply_skill_damage = $ply['skill']['skill_damege_range'];
$array['turn'.$i]['ply_atk']['skill_damage'] = $ply_skill_damage;
$array['turn'.$i]['ply_atk']['total'] = floor($array['turn'.$i]['ply_atk']['total']*($ply_skill_damage/100));
break;
case 'attack_add_dice': //ダイスを追加
$ply_skill_damage = $ply['skill']['skill_damege_range'];//追加ダイスの個数
$ply_skill_damage_total = 0; //追加ダイスのカウント用
for($j=1;$j<=$ply_skill_damage;$j++){
$count = mt_rand(1,$ply['stats']['atk_range']);
$array['turn'.$i]['ply_atk']['skill_damage'][] = $count;
$ply_skill_damage_total = $ply_skill_damage_total + $count;
}
$array['turn'.$i]['ply_atk']['skill_damage_total'] = $ply_skill_damage_total;
$array['turn'.$i]['ply_atk']['total'] = $array['turn'.$i]['ply_atk']['total']+$ply_skill_damage_total;
break;
}
}
//最終ダメージ決定
$ply_total_damage = floor($array['turn'.$i]['ply_atk']['total']*($ply_damege_bonus/100));
$emy_total_def = floor($array['turn'.$i]['emy_def']['total']*($emy_damege_bonus/100));
//攻撃値が装甲値を上回った場合
if( ($ply_total_damage - $emy_total_def)> 0){
$emy_end_hp = $emy_now_hp - ($ply_total_damage - $emy_total_def);
}else{
$emy_end_hp = $emy_now_hp;
}
$array['turn'.$i]['ply_total_damage'] = $ply_total_damage;
$array['turn'.$i]['emy_total_def'] = $emy_total_def;
$array['turn'.$i]['ply_atk_hit'] = 1; //hit
}else{
//超えていない場合
$emy_end_hp = $emy_now_hp;
$array['turn'.$i]['ply_atk_hit'] = 0; //miss
}
// エネミーターン
if($array['turn'.$i]['emy_atk']['total'] > $array['turn'.$i]['ply_def']['total']){
//超えていた場合ダメージ判定
//スキル発動レート
$emy_skill_rate = mt_rand(1, 100);
$array['turn'.$i]['emy_skill_rate']=$emy_skill_rate;
//スキル発動判定
if($emy['skill']['skill_rate'] >= $emy_skill_rate){
switch($emy['skill']['skill_type']){
case 'attack_add_bonus': //攻撃ボーナス値に加算するタイプ
$emy_skill_damage = mt_rand(1,$emy['skill']['skill_damege_range']);
$array['turn'.$i]['emy_atk']['skill_damage'] = $skill_damage;
$array['turn'.$i]['emy_atk']['total'] = $array['turn'.$i]['emy_atk']['total'] + $emy_skill_damage;
break;
case 'attack_multiply_total': //最終トータルに乗算する
$emy_skill_damage = $emy['skill']['skill_damege_range'];
$array['turn'.$i]['emy_atk']['skill_damage'] = $emy_skill_damage;
$array['turn'.$i]['emy_atk']['total'] = floor($array['turn'.$i]['emy_atk']['total']*($emy_skill_damage/100));
break;
case 'attack_add_dice': //ダイスを追加
$emy_skill_damage = $emy['skill']['skill_damege_range'];//追加ダイスの個数
$emy_skill_damage_total = 0; //追加ダイスのカウント用
for($j=1;$j<=$emy_skill_damage;$j++){
$count = mt_rand(1,$emy['stats']['atk_range']);
$array['turn'.$i]['emy_atk']['skill_damage'][] = $count;
$emy_skill_damage_total = $emy_skill_damage_total + $count;
}
$array['turn'.$i]['emy_atk']['skill_damage_total'] = $emy_skill_damage_total;
$array['turn'.$i]['emy_atk']['total'] = $array['turn'.$i]['emy_atk']['total']+$emy_skill_damage_total;
break;
}
}
//最終ダメージ決定
$emy_total_damage = floor($array['turn'.$i]['emy_atk']['total']*($emy_damege_bonus/100));
$ply_total_def = floor($array['turn'.$i]['ply_def']['total']*($ply_def_bonus/100));
//攻撃値が装甲値を上回った場合
if( ($emy_total_damage - $ply_total_def)> 0){
$ply_end_hp = $ply_now_hp - ($emy_total_damage - $ply_total_def);
}else{
$ply_end_hp = $ply_now_hp;
}
$array['turn'.$i]['emy_total_damage'] = $emy_total_damage;
$array['turn'.$i]['ply_total_def'] = $ply_total_def;
$array['turn'.$i]['emy_atk_hit'] = 1; //hit
}else{
//超えていない場合
$ply_end_hp = $ply_now_hp;
$array['turn'.$i]['emy_atk_hit'] = 0; //miss
}
// 現在HP
$array['turn'.$i]['ply_now_hp'] = $ply_end_hp;
$array['turn'.$i]['emy_now_hp'] = $emy_end_hp;
//戦闘終了判定
if($emy_end_hp <= 0){
$array['victory_flag'] = 1;
break;
}elseif($ply_end_hp<=0){
$array['victory_flag'] = 0;
break;
}
}
//規定回数のターンを過ぎて戦闘終了判定がない場合
//配列にvictory_flagのキーがあるかどうか
if(!array_key_exists('victory_flag',$array)){
//タイムアップフラグ
if($ply_end_hp>=$emy_end_hp ){
$array['time_up_flag'] = 1;
}else{
$array['time_up_flag'] = 0;
}
}else{
// $array['last'] = 'kumaaaaa';
}
print_r($array);