Bon j'ai lu ça vite fait et je pense que quelque chose de bête et méchant comme ça ira parfaitement.
Je pars du principe que chaque joueur doit paramétrer les priorités d'actions par unité et qu'il existe aussi des priorités établies par défaut si le joueur ne connais pas cette option ou tout simplement s'il oublie ou ne veut pas les modifier, alors voici ce que ça donne pour moi :
Je pars du principe que chaque joueur doit paramétrer les priorités d'actions par unité et qu'il existe aussi des priorités établies par défaut si le joueur ne connais pas cette option ou tout simplement s'il oublie ou ne veut pas les modifier, alors voici ce que ça donne pour moi :
Code PHP :
<?php
$priorité = array();
$priorité[0] = $tableau_priorite_defaut_attaque;
$priorite[1] = $tableau_priorite_defaut_defense
$priorite[2] = $tableau_priorite_defenseur;
$priorite[3] = $tableau_priorite_attaquant;
?>
Ainsi, si nous appliquons un print_r($priorite), nous obtiendrons alors quelque chose comme cela si je comprend bien :
Citation :array
{
[0] => array
{
'hoplite' => 'hoplite'
'archer' => 'hoplite'
'frondeur' => 'hoplite'
}
[1] => array
{
'hoplite' => 'hoplite'
'archer' => 'archer'
'frondeur' => 'hoplite'
}
[2] => array
{
'hoplite' => 'hoplite'
'archer' => 'frondeur'
'frondeur' => 'hoplite'
}
[3] => array
{
'hoplite' => 'hoplite'
'archer' => 'hoplite'
'frondeur' => 'hoplite'
}
}
Donc là je ne gère que trois unités et en gère que les priorités d'actions au combat et non les objectifs de batailles telle que tu les as décris (piller la ville, massacrer tout le monde ...)
Dans le code ce tableau peut être exploité de la manière suivante :
Code PHP :
<?php
/* On déclare des caractéristiques au pif pour les unités afin de faire le script, à noter
que tout cela se trouve bien entendu dans la Base De Donnée en théorie et n'est donc
pas directement présent dans le script de combat. */
$tableau_caracteristique = array();
$tableau_caracteristique['hoplite'] = array( 'defense_tir' = 5,
'defense_corps' = 10,
'attaque_corps' = 10,
'attaque_distance' = 0);
$tableau_caracteristique['archer'] = array( 'defense_tir' = 3,
'defense_corps' = 6,
'attaque_corps' = 4,
'attaque_distance' = 20);
$tableau_caracteristique['frondeur'] = array( 'defense_tir' = 2,
'defense_corps' = 4,
'attaque_corps' = 5,
'attaque_distance' = 12);
/* On déclare les différentes priorités, en réalité celles-ci sortent de la Base De Donnée,
il est aussi à préciser qu'afin d'alléger tout cela il sera préférable d'utiliser des identifiants
pour définir une unité plutôt que le nom réel de celle-ci (par exemple 1 == hoplite) */
$priorite = array();
$priorite[0] = array( 'hoplite' => 'hoplite',
'archer' => 'hoplite',
'frondeur' => 'hoplite');
$priorite[1] = array('hoplite' => 'hoplite',
'archer' => 'archer',
'frondeur' => 'hoplite');
$priorite[2] = array('hoplite' => 'hoplite',
'archer' => 'frondeur',
'frondeur' => 'hoplite');
$priorite[3] = array('hoplite' => 'hoplite',
'archer' => 'hoplite',
'frondeur' => 'hoplite');
/* On déclare ensuite l'ordre dans lequel chaque unité sera attaqué suivant la disparition des autres
(si l'hoplite veut taper l'archer mais qu'il n'y en a plus il va se rabattre sur les frondeurs s'il n'y en a
plus i lse rabat sur les hoplites et ainsi de suite) (sachant que l'on revient toujours à la case départ
même si l'on ciblé les derniers de la liste)*/
$liste_defil = array('hoplite', 'archer', 'frondeur');
/* Ceci fait on peut déclarer les tableaux des armées défensives et attaquantes */
$armee_offensive = array( 'hoplite' => 2000,
'archer' => 500,
'frondeur' => 200);
$nombre_troupe_attaque = 2700;
$armee_defensive = array( 'hoplite' => 1000,
'archer' => 1000,
'frondeur' => 100);
$nombre_troupe_defense = 2100;
/* Enfin nous pouvons lancer la boucle du combat qui ne s'arrêtera pas avant qu'une des deux armées soient dissoutes :P */
$numero_phase = 1;
while($nombre_troupe_attaque != 0 && $nombre_troupe_defense != 0)
{
if($numero_phase == 4)
$numero_phase = 0;
/* On va partir du principe que le combat se déroule de façons linéaire, la première action revient au défenseur
qui est le premier à pouvoir atteindre l'ennemi grâce à la hauteur de ses archers, ainsi nous allons définir les phases
comme cela :
- Phase 1 : Tir des archers défense PUIS attaque
- Phase 2 : Tir des frondeurs défense PUIS attaque
- Phase 3 : Combat au corps à corps avec initiative automatique à la défense une fois de plus
À noter que le script suivant en tient pas compte des notions d'initiatives pouvant changer de camp ni des notions de
positions, de portée ...
À préciser que je ne donnerai que l'exemple des archers, et à préciser également qu'il faudra bien entendu découper tout cela
en fonction par la suite si jamais ç te sert à quelque chose. */
if($numero_phase == 1)
{
$cible_definit = 0;
/* On commence donc par faire tirer nos amis les archers de la défense, on vérifie déjà que la cible existe */
if($armee_offensive[$priorite[2]['archer']] == 0)
{
$parcourt_cible = 0;
while($cible_definit == 0)
(
if($armee_offensive[$liste_defil[$parcourt_cible]] != 0)
$cible_definit = $liste_defil[$parcourt_cible];
$parcourt_cible++;
}
}
else
$cible_definit = $priorite[2]['archer'];
/* On a définit une cible pour nos amis les archers, on peut donc tirer dans le tas,
on part du principe simple que l'on compare à l'arrache defense / attaque et que
l'on fait un petit calcul bidon que je ne testerait même pas pour trouver le nombre
de pertes. */
$pertes = (($armee_defensive['archer'] * $tableau_caracteristique['archer']['attaque_distance']) /
($armee_offensive[$cible_definit] * $tableau_caracteristique[$cible_definit]['defense_tir']);
/* On vire les pertes de l'armée et de la variable contenant la totalité des troupes */
$armee_offensive -= $pertes;
if($pertes > $armee_offensive[$cible_definit])
$armee_offensive[$cible_definit] = 0;
else
$armee_offensive[$cible_definit] -= $pertes;
}
$numero_phase++;
}
?>