求助 轮流攻击问题

设定  A2 A3 B1 B4 为步兵  A4  A5 B5为弓兵  A1 B2 B3为骑兵
速度骑兵>弓兵>步兵    速度高的先出手
若A部队出手攻击,则目标选取顺序为:7,4,10,1,13,8,5,11,2,14,9,6,12,3,15.
单次攻击战斗流程:      
攻击部队:A
1.按照规则选取目标部队,设为B   
2.取A部队攻击力与B部队护甲,计算实际伤害=A部队攻击力-B部队防御力
3.实际伤害/B部队单位血量=本次攻击杀死敌兵数量,余数进位,即每次攻击至少会杀死一个兵。
4.B部队数量-本次攻击被杀死数量=剩余士兵数   
5.本次攻击结束。      
轮流攻击直到有一方所有部队死亡,战斗结束      
战斗数值 步兵 攻 2000  防100  hp 250 速度 20-24
         骑兵 攻 3000  防150  hp 300 速度 28-30
         弓兵 攻 2500  防50   hp 200 速度 25-27   
设定骑兵数量每格 80; 步兵每格 120; 弓兵每格100。(攻击、防御力和数量无关)





//初始化团队
$team_a=array(
"5"=>set_c("军团A骑兵甲","cavalry"),
"11"=>set_c("军团A弓兵甲","archer"),
"14"=>set_c("军团A弓兵乙","archer"),
"8"=>set_c("军团A步兵甲","infantry"),
"7"=>set_c("军团A步兵乙","infantry")
);
$team_b=array(
"8"=>set_c("军团B骑兵甲","cavalry"),
"9"=>set_c("军团B骑兵乙","cavalry"),
"13"=>set_c("军团B弓兵甲","archer"),
"5"=>set_c("军团B步兵甲","infantry"),
"10"=>set_c("军团B步兵乙","infantry")
);
//按速度对团队进行排序
$team_a=spe_sort($team_a);
$team_b=spe_sort($team_b);
//初始化战斗单位
function set_c($name,$type){
//初始化兵种 infantry 步兵 archer弓兵 cavalry骑兵,兵种=>(攻,防,HP,速度,数量).
$arm=array(
"infantry"=>array("tak"=>20,"def"=>10,"hp"=>250,"spe"=>"20|24","amo"=>120),
"archer"=>array("tak"=>25,"def"=>5,"hp"=>200,"spe"=>"25|27","amo"=>100),
"cavalry"=>array("tak"=>30,"def"=>15,"hp"=>300,"spe"=>"28|30","amo"=>80)
);
$d=$arm[$type];
$d["name"]=$name;
$spe=explode("|",$d["spe"]);
$d["spe"]=rand($spe[0],$spe[1]);
return $d;
}
//速度排序
function spe_sort($array){
foreach($array as $key => $value)
{
$temp[$key] = $value['spe'];
}
arsort($temp);
foreach($temp as $key => $value)
{
$result[$key] = $array[$key];
}
return $result;
}
//战斗函数 $active=攻击团队 $passive=被攻击团队
function fight($active,$passive){
  //目标选择规则
  $targeting=array(7,4,10,1,13,8,5,11,2,14,9,6,12,3,15);
foreach($active as $k=>$a)
{  foreach($targeting as $t)
     {
   if(isset($passive[$t]))
   {
    $hurt=$active[$k]["tak"]-$passive[$t]["def"];
    $kill=ceil($hurt/$passive[$t]["hp"]);
    $passive[$t]["amo"]=$passive[$t]["amo"]-$kill;
    echo "<font color='#0000FF'>".$active[$k]["name"]."</font> 攻击了 <font color='#0000FF'>". $passive[$t]["name"] ."</font>,共伤害<font color='#ff000'> $hurt  </font>点,杀死<font color='#ff000'> $kill </font>个单位.剩余".$passive[$t]["amo"]."个单位</br>";
   
    if( $passive[$t]["amo"]<=0)
      {
     echo "×<font color='#ff000'>".$passive[$t]["name"]."</font>被消灭了!</br>";
     unset($passive[$t]);
      if(!count($passive)){echo "<font color='#ff000'>该军团已全军覆没!战斗结束....</font>"; die();}
    }
   break;  
   }
  
  }
  }
  echo "-------------------本回合结束,换对方攻击-------------------</br>";
fight($passive,$active);
}
echo "战斗开始!</br>";
fight($team_a,$team_b);
?>



发现上面代码有问题  写出来跟速度无关

希望高手指点  怎么修改 才能实现 是按照速度先后攻击的  (也就是先骑士再到弓兵再步兵的顺序, 而不是上面所写的先A部队再B部队的顺序)

给出程序代码更好    万分感谢

附件

QQ截图未命名.jpg (27.84 KB)

2010-4-5 10:38

QQ截图未命名.jpg