24-10-2006, 08:34 PM
Salut à tous,
je fais appel a votre experience de programmation de jeux en PHP
Dans mon jeu j'ai deux armées qui doivent s'affronter, et je dois réaliser le script qui fait cela.
au debut de mon script, j'extrait les armées de la base de données et je crée 2 objet avec: un pour l'attaquant, un pour le defenseur.
voici la class armée:
j'ai donc pour chaque armée un nombre de points d'attaque au total, et un nombre de points de defense au total.je fais appel a votre experience de programmation de jeux en PHP
Dans mon jeu j'ai deux armées qui doivent s'affronter, et je dois réaliser le script qui fait cela.
au debut de mon script, j'extrait les armées de la base de données et je crée 2 objet avec: un pour l'attaquant, un pour le defenseur.
voici la class armée:
Code PHP :
<?
class armee {
var $unitesArmee;
var $unitesArmeeMortes;
var $idJoueur;
var $niveauArme;
var $niveauArmure;
//les constructeurs
function unitesArmee() {
$this->idJoueur=0;
$this->unitesArmee=Array();
$this->unitesArmeeMortes=Array();
}
//les methodes maintenant
function ajoutUnite($unites_id,$unites_PA,$unites_PD,$unites_PR,$action_mouvement_unites_quantite,$unites_nom,$unites_capacite,$niveauArme,$niveauArmure) {
$this->niveauArme=$niveauArme;
$this->niveauArmure=$niveauArmure;
$index=count($this->unitesArmee);
//on enregistre l'i de l'unite
$this->unitesArmee[$index][0]=$unites_id;
//on enregistre les points d'attaque de l'unite
$this->unitesArmee[$index][1]=$unites_PA;
//on enregistre les points de defense de l'unite
$this->unitesArmee[$index][2]=$unites_PD;
//on enregistre la rapidite de l'unite
$this->unitesArmee[$index][3]=$unites_PR;
//on enregistre le nombre d'unites
$this->unitesArmee[$index][4]=$action_mouvement_unites_quantite;
//on enregistre le nom de l'unite
$this->unitesArmee[$index][5]=$unites_nom;
//on enregistre la capacite de transport de l'unite
$this->unitesArmee[$index][6]=$unites_capacite;
//on enregistre les ppoints d'attaque total
$pointsAttaque=$unites_PA*$action_mouvement_unites_quantite*$unites_PR;
for($i=0;$i<$niveauArme;$i++) $pointsAttaque=($pointsAttaque/100)*110;
$this->unitesArmee[$index][7]=$pointsAttaque;
//on enregistre les points de defense total
$pointsDefense=$unites_PD*$action_mouvement_unites_quantite;
for($i=0;$i<$niveauArmure;$i++) $pointsDefense=($pointsDefense/100)*110;
$this->unitesArmee[$index][8]=$pointsDefense;
}
function nettoyage() {
$unitesArmeeTemp = Array();
for($i=0;$i<count($this->unitesArmee);$i++) {
$PDtotal=$this->unitesArmee[$i][8];
for($j=0;$j<$this->niveauArmure;$j++) $PDtotal=($PDtotal/110)*100;
$this->unitesArmee[$i][4]=round($PDtotal/$this->unitesArmee[$i][2]);
}
for($i=0;$i<count($this->unitesArmee);$i++) {
if($this->unitesArmee[$i][4]>0) {
$unitesArmeeTemp[count($unitesArmeeTemp)]=$this->unitesArmee[$i];
}
else {
$this->unitesArmeeMortes[count($this->unitesArmeeMortes)]=$this->unitesArmee[$i];
}
}
//on recalcule les PA et PD
for($j=0;$i<count($unitesArmeeTemp);$i++) {
//on recalcule les PA
$pointsAttaque=$unitesArmeeTemp[$i][1]*$unitesArmeeTemp[$i][4]*$unitesArmeeTemp[$i][3];
for($j=0;$j<$this->niveauArme;$j++) $pointsAttaque=($pointsAttaque/100)*110;
$unitesArmeeTemp[$i][7]=$pointsAttaque;
//on recalcule les PD
$pointsDefense=$unitesArmeeTemp[$i][2]*$unitesArmeeTemp[$i][4];
for($j=0;$j<$this->niveauArmure;$j++) $pointsDefense=($pointsDefense/100)*110;
$unitesArmeeTemp[$i][8]=$pointsDefense;
}
$this->unitesArmee=$unitesArmeeTemp;
}
//on declare les accesseurs
function getIdJoueur() {
return $this->idJoueur;
}
function setIdJoueur($idJoueur) {
$this->idJoueur=$idJoueur;
}
function getPATotal() {
$PATotal=0;
for($i=0;$i<count($this->unitesArmee);$i++) {
$PATotal+=$this->unitesArmee[$i][7];
}
return $PATotal;
}
function getPDTotal() {
$PDTotal=0;
for($i=0;$i<count($this->unitesArmee);$i++) {
$PDTotal+=$this->unitesArmee[$i][8];
}
return $PDTotal;
}
function isKO() {
$isKO=true;
for($i=0;$i<count($this->unitesArmee);$i++) {
if($this->unitesArmee[$i][8]>0) $isKO=false;
}
return $isKO;
}
function getNbUnitesTotal() {
$nbUnitesTotal=0;
for($i=0;$i<count($this->unitesArmee);$i++) {
$nbUnitesTotal+=$this->unitesArmee[$i][4];
}
return $nbUnitesTotal;
}
function getNbUnitesDiff() {
return count($this->unitesArmee);
}
function getNbUnitesDiffMort() {
return count($this->unitesArmeeMortes);
}
function getNbUnites($unite) {
return $this->unitesArmee[$unite][4];
}
function getPDTotalUnites($unite) {
return $this->unitesArmee[$unite][8];
}
function setPDTotalUnites($unite,$points) {
$this->unitesArmee[$unite][8]=$points;
}
function toString() {
$chaine="";
for($i=0;$i<count($this->unitesArmee);$i++) {
$chaine.=$this->unitesArmee[$i][5].": ".$this->unitesArmee[$i][4]."<BR>";
}
if($chaine=="") $chaine="Aucune unité<BR>";
return $chaine;
}
function getCapacite() {
$capacite=0;
for($i=0;$i<count($this->unitesArmee);$i++) {
$capacite+=$this->unitesArmee[$i][6]*$this->unitesArmee[$i][4];
}
return $capacite;
}
function getQuantite($unite) {
return $this->unitesArmee[$unite][4];
}
function getIdUnite($unite) {
return $this->unitesArmee[$unite][0];
}
function getIdUniteMort($unite) {
return $this->unitesArmeeMortes[$unite][0];
}
}
?>
la ou reside tout la difficulté et de choisir qu'elle unité sera la cible de chaques attaque (puisque chaque armée est composée de plusieurs unités en quantité variable : le premier index de mon tableau $unitesArmee). et le deuxieme probleme reside à savoir combien de points d'attaque balancer à chaque attaques (si je les fait un par un, j'imagine meme pas le temps d'execution du script en cas de combats de grandes armées)
Là ou j'en suis pour le moment:
Pour le moment je realise chaque attaques l'une après l'autre,
ROUND I
CALCUL des points d'attaque de l'attaquant
CALCUL des points d'attaque du defenseur
ON FAIT SUBIR AU DEFENSEUR LES POINTS D'ATTAQUE DE L'ATTAQUANT
calcul du PGCD entre les differentes quantité d'unites differentes
enfonction du PGCD on choisit la cible
on fait subir à la cible 1% des points d'attaque
PAREIL POUR L'ATTAQUANT
ON VIRE LES UNITES MORTES
ON RECOMMENCE UN ROUND
Seulement voila, cette solution laisse enormément de place au hasard, pour une meme bataille on peut aller de la destruction mutuelle des armées à la victoire ecrasante meme en cas d'armées desequilibrées (1 pour 2)
Voila, donc si vous avez une ebauche d'algo de bataille ou alors si vous avez la réponse a mes questions tout simplement, je suis preneur
merci d'avance