1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
|
//On calcule le niveau d'anticipation
if(($attaquant_technologie['anticipation'] - $defenseur_technologie['anticipation']) > 0){
$rand_attaquant = number_format(50 + ($attaquant_technologie['anticipation'] - $defenseur_technologie['anticipation']) * 5 / 2, 0);
$rand_defenseur = 100 - $rand_attaquant;
}else if(($defenseur_technologie['anticipation'] - $attaquant_technologie['anticipation']) > 0){
$rand_defenseur = number_format(50 + ($defenseur_technologie['anticipation'] - $attaquant_technologie['anticipation']) * 5 / 2, 0);
$rand_attaquant = 100 - $rand_defenseur;
}else{
$rand_attaquant = 50;
$rand_defenseur = 50;
}
if(isset($defenseur)){
$round=1;
while($round<=5 && !empty($attaquant) && !empty($defenseur)){
shuffle($attaquant);
shuffle($defenseur);
if(count($attaquant) >= count($defenseur)){
$grand='attaquant';
$petit='defenseur';
}else{
$grand='defenseur';
$petit='attaquant';
}
$residu = array_diff_key(${$grand}, ${$petit});
foreach(${$petit} as $cle=>$valeur){
//l'attaquant attaque le premier sinon c'est le defenseur
if((mt_rand(1, 100) <= $rand_attaquant)){
//Calcul du coup critique eventuel (X5)
(mt_rand(1, 100) <= $unites_desc_attaquant[$attaquant[$cle]['type']]['coup_critique']) ? $coup_critique_attaquant = 5 : $coup_critique_attaquant = 1;
$degats = $coup_critique_attaquant * $attaquant[$cle]['valeur_attaque'] * (100 - $unites_desc_defenseur[$defenseur[$cle]['type']][$attaquant[$cle]['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$cle]['type']]['armure'];
if($degats > 0)
$defenseur[$cle]['vie'] -= $degats;
//Si l'unité du defenseur est vivante elle contre attaque si elle ne l'a pas déjà fait auparavant sur une autre unité
if($defenseur[$cle]['vie'] <= 0){
$defenseur_pertes[$defenseur[$cle]['type']][$round]++;
unset($defenseur[$cle]);
}else{
(mt_rand(1, 100) <= $unites_desc_attaquant[$attaquant[$cle]['type']]['coup_critique']) ? $coup_critique_defenseur = 5 : $coup_critique_defenseur = 1;
$degats = $coup_critique_defenseur * $defenseur[$cle]['valeur_attaque'] * (100 - $unites_desc_attaquant[$attaquant[$cle]['type']][$defenseur[$cle]['type_attaque']]) / 100 - $unites_desc_attaquant[$attaquant[$cle]['type']]['armure'];
if($degats > 0){
$attaquant[$cle]['vie'] -= $degats;
if($attaquant[$cle]['vie'] <= 0){
$attaquant_pertes[$attaquant[$cle]['type']][$round]++;
unset($attaquant[$cle]);
}
}
}
}else{
//Calcul du coup critique eventuel (X5)
(mt_rand(1, 100) <= $unites_desc_defenseur[$defenseur[$cle]['type']]['coup_critique']) ? $coup_critique_defenseur = 5 : $coup_critique_defenseur = 1;
$degats = $coup_critique_defenseur * $defenseur[$cle]['valeur_attaque'] * (100 - $unites_desc_attaquant[$attaquant[$cle]['type']][$defenseur[$cle]['type_attaque']]) / 100 - $unites_desc_attaquant[$attaquant[$cle]['type']]['armure'];
if($degats > 0)
$attaquant[$cle]['vie'] -= $degats;
//Si l'unité du defenseur est vivante elle contre attaque si elle ne l'a pas déjà fait auparavant sur une autre unité
if($attaquant[$cle]['vie'] <= 0){
$attaquant_pertes[$attaquant[$cle]['type']][$round]++;
unset($attaquant[$cle]);
}else{
(mt_rand(1, 100) <= $unites_desc_defenseur[$defenseur[$cle]['type']]['coup_critique']) ? $coup_critique_attaquant = 5 : $coup_critique_attaquant = 1;
$degats = $coup_critique_attaquant * $attaquant[$cle]['valeur_attaque'] * (100 - $unites_desc_defenseur[$defenseur[$cle]['type']][$attaquant[$cle]['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$cle]['type']]['armure'];
if($degats > 0){
$defenseur[$cle]['vie'] -= $degats;
if($defenseur[$cle]['vie'] <= 0){
$defenseur_pertes[$defenseur[$cle]['type']][$round]++;
unset($defenseur[$cle]);
}
}
}
}
}
//Remise à jour du petit tableau
${$petit} = array_values(${$petit});
$cle2=0;
foreach($residu as $cle=>$valeur){
if(!isset(${$petit}[$cle2]) && !empty(${$petit})){
$cle2=0;
${$petit} = array_values(${$petit});
}else if(empty(${$petit})){
break;
}
//Calcul du coup critique eventuel (X5)
(mt_rand(1, 100) <= ${'unites_desc_'.$grand}[${$grand}[$cle]['type']]['coup_critique']) ? $coup_critique_{$grand} = 5 : $coup_critique_{$grand} = 1;
$degats = $coup_critique_{$grand} * ${$grand}[$cle]['valeur_attaque'] * (100 - ${'unites_desc_'.$petit}[${$petit}[$cle2]['type']][${$grand}[$cle]['type_attaque']]) / 100 - ${'unites_desc_'.$petit}[${$petit}[$cle2]['type']]['armure'];
if($degats > 0)
${$petit}[$cle2]['vie'] -= $degats;
//Si l'unité du defenseur est vivante elle contre attaque si elle ne l'a pas déjà fait auparavant sur une autre unité
if(${$petit}[$cle2]['vie'] <= 0){
${$petit.'_pertes'}[${$petit}[$cle2]['type']][$round]++;
unset(${$petit}[$cle2]);
}
$cle2++;
}
//Remise à jour des tableaux
$attaquant = array_values($attaquant);
$defenseur = array_values($defenseur);
$round++;
}
} |
Partager