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 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
//Combat en 5 rounds
$round = 1;
while($round <= 5){
if(empty($attaquant) || empty($defenseur))
break;
//On melange les tableaux aleatoirement
shuffle($attaquant);
shuffle($defenseur);
$i=0;
$max_occ = count($attaquant);
$min_occ = count($defenseur);
$max = 'attaquant';
if($min_occ > $max_occ){
$max_occ = $min_occ;
$min_occ = count($attaquant);
$max = 'defenseur';
}
while($i < $min_occ){
//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[$i]['type']]['coup_critique']) ? $coefficient = 5 : $coefficient = 1;
$degats = $coefficient * $attaquant[$i]['valeur_attaque'] * (100 - $unites_desc_defenseur[$defenseur[$i]['type']][$attaquant[$i]['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$i]['type']]['armure'];
$attaquant[$i]['r'.$round] = 1;
if($degats > 0)
$defenseur[$i]['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[$i]['vie'] <= 0){
unset($defenseur[$i]);
}else if($defenseur[$i]['r'.$round] == 0){
$degats = $coefficient * $defenseur[$i]['valeur_attaque'] * (100 - $unites_desc_attaquant[$attaquant[$i]['type']][$defenseur[$i]['type_attaque']]) / 100 - $unites_desc_attaquant[$attaquant[$i]['type']]['armure'];
$defenseur[$i]['r'.$round] = 1;
if($degats > 0)
$attaquant[$i]['vie'] -= $degats;
}
}else{
//Calcul du coup critique eventuel (X5)
(mt_rand(1, 100) <= $unites_desc_defenseur[$defenseur[$i]['type']]['coup_critique']) ? $coefficient = 5 : $coefficient = 1;
$degats = $coefficient * $defenseur[$i]['valeur_attaque'] * (100 - $unites_desc_attaquant[$attaquant[$i]['type']][$defenseur[$i]['type_attaque']]) / 100 - $unites_desc_attaquant[$attaquant[$i]['type']]['armure'];
$defenseur[$i]['r'.$round] = 1;
if($degats > 0)
$attaquant[$i]['vie'] -= $degats;
//Si l'unité de l'attaquant est vivante elle contre attaque si elle ne l'a pas déjà fait auparavant sur une autre unité
if($attaquant[$i]['vie'] <= 0){
unset($attaquant[$i]);
}else if($attaquant[$i]['r'.$round] == 0){
$degats = $coefficient * $attaquant[$i]['valeur_attaque'] * (100 - $unites_desc_defenseur[$defenseur[$i]['type']][$attaquant[$i]['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$i]['type']]['armure'];
$attaquant[$i]['r'.$round] = 1;
if($degats > 0)
$defenseur[$i]['vie'] -= $degats;
}
}
$i++;
}
//Si les unités de l'attaquant sont plus nombreuses, alors le residu attaque sans resistances
if($max == 'attaquant'){
//On remet d'aplomb le tableau du defenseur et le pointeur du defenseur à 0
$defenseur = array_values($defenseur);
$taille_def = count($defenseur);
$j=0;
while($i < $max_occ && !empty($defenseur)){
(mt_rand(1, 100) <= $unites_desc_attaquant[$attaquant[$i]['type']]['coup_critique']) ? $coefficient = 5 : $coefficient = 1;
$degats = $coefficient * $attaquant[$i]['valeur_attaque'] * (100 - $unites_desc_defenseur[$defenseur[$j]['type']][$attaquant[$i]['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$j]['type']]['armure'];
$attaquant[$i]['r'.$round] = 1;
if($degats > 0){
$defenseur[$j]['vie'] -= $degats;
if($defenseur[$j]['vie'] <= 0)
unset($defenseur[$j]);
}
if($j == ($taille_def-1)){
$j=0;
$defenseur = array_values($defenseur);
$taille_def = count($defenseur);
}
$j++;
$i++;
}
}
//Si les unités du defenseur sont plus nombreuses, alors le residu attaque sans resistances
if($max == 'defenseur'){
//On remet d'aplomb le tableau du defenseur et le pointeur du defenseur à 0
$attaquant = array_values($attaquant);
$taille_att = count($attaquant);
$j=0;
while($i < $max_occ && !empty($attaquant)){
(mt_rand(1, 100) <= $unites_desc_defenseur[$defenseur[$i]['type']]['coup_critique']) ? $coefficient = 5 : $coefficient = 1;
$degats = $coefficient * $defenseur[$i]['valeur_attaque'] * (100 - $unites_desc_attaquant[$attaquant[$j]['type']][$defenseur[$i]['type_attaque']]) / 100 - $unites_desc_attaquant[$attaquant[$j]['type']]['armure'];
$defenseur[$i]['r'.$round] = 1;
if($degats > 0){
$attaquant[$j]['vie'] -= $degats;
if($attaquant[$j]['vie'] <= 0)
unset($attaquant[$j]);
}
if($j == ($taille_att-1)){
$j=0;
$attaquant = array_values($attaquant);
$taille_att = count($attaquant);
}
$j++;
$i++;
}
}
//Remise à jour des tableaux pour utiliser mt_rand sur les clés sur les rounds suivants
if($round < 5){
$attaquant = array_values($attaquant);
$defenseur = array_values($defenseur);
}
$round++;
} |
Partager