Bonjour,
j'ai crée le bout de code suivant (simplifié) pour un petit jeu :
En fait il s'agit de simuler un combat entre 2 troupes prenant en compte plusieurs technologies associées au défenseur et à l'attaquant. Par exemple, j'ai une technologie "anticipation" qui permet au joueur possédant la meilleure techno des 2 d'attaquer le premier dans un combat avec un avantage de 5% par point de techno supplémentaire(ex: l'attaquant a une techno de 5, le def 3 -> l'attaquant aura 55% de chance d'attaquer le premier ce qui lui permettra s'il tue l'unité du defenseur de ne pas se faire attaquer par elle (logique^^)->variable $rand_attaquant).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 for($i=1; $i<=5; $i++){ foreach($attaquant as $cle){ if(mt_rand(1, 100) <= $rand_attaquant){ //L'attaquant attaque le defenseur puis eventuellement le defenseur s'il survit //Calcul du coup critique eventuel $coup_critique = mt_rand(1, 100); ($coup_critique <= $unites_desc_attaquant[$cle['type']]['coup_critique']) ? $coefficient = 5 : $coefficient = 1; $indice_defenseur = mt_rand(0, count($defenseur)-1); $degats_sur_def = $coefficient * $cle['valeur_attaque'] * ( 100 - $unites_desc_defenseur[$defenseur[$indice_defenseur]['type']][$cle['type_attaque']]) / 100 - $unites_desc_defenseur[$defenseur[$indice_defenseur]['type']]['armure']; ($degats_sur_def < 0) ? $degats_sur_def = 0; $defenseur[$indice_defenseur]['vie'] -= $degats_sur_def; //Contre attaque du defenseur s'il est en vie et qu'il a pas encore attaqué if($defenseur[$indice_defenseur]['vie'] < 0){ unset($defenseur[$indice_defenseur]); $defenseur = array_values($defenseur); } }else{ } } }
Enfin bref, ce n'est pas ce qui me pose problème, pas plus que de calculer la valeur de l'attaque du joueur attaquant en considérant l'armure ou la resistance du defenseur. Ce qui me pose problème, c'est de tirer une clé aléatoire sur le defenseur qui ne soit pas mort (mes clés de tableau sont des clé numériques triees 0,1, 2...). J'avais pensé supprimer, après chaque unité qui est attaqué et via un test, les clés du tableau du defenseur dont la valeur 'vie' est < 0 et via un array_values de recalculer le tableau du def, mais c'est extremement lourd en traitement...
Voilà je sais pas si vous avez compris mon problème
En gros, il serait simple d'attaquer chaque unité du defenseur eventuellement meme s'il est mort puis de faire le 'tri' entre les morts et les vivants a chaque fin de round, mais comment faire ce tri en milieu de round pour que chaque attaque se porte sur une unité encore vivante ? Faire un mt_rand au milieu du round de bataille ne sert pas puisque j'ai des "trous" dans mes clés de tableaux du aux morts
Merci de votre aide et posez moi des questions, je sais que je m'explique mal lol
@+
Partager