JeuWeb - Crée ton jeu par navigateur
Problème dans un système d'attaque - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Problème dans un système d'attaque (/showthread.php?tid=1314)



Problème dans un système d'attaque - shadow39 - 24-03-2008

bonjour,
j'ai un problème avec mon système d'attaque: une fonction qui augmente la puissance des tires en fonction des unités ennemis. Le probleme est si 2 unités différentes prennent pour cible une même unités
EX: 1 fantassin + 1 mitrailleur tire sur fantassin en sachant que les mitrailleurs ont un tire plus puissant sur les fantassins
là mon script me donne des valeurs qui n'ont rien à voir (comme une valeur négative)

le 2eme problème est si l'adversaire n'a pas l'unité choisi au hasard dans ce cas là je ne sais pas comment faire pour qu'il en choisis une autre voir qu'il évite cette valeur

voici le programme
Code PHP :
<?php 
function mitrailleur($mitrailleur,$fantassinD){

$valeur = rand(0, 20);//pour faire varier la puissance d'attaque
$valeur = $valeur / 100;
$pusbouclier = 30 * $fantassinD; //calcule de la puissance des bouclier
$puslife = 850 * $fantassinD; //calcule des point de vie des fantassin
$pusmitrailleur = (390 * $mitrailleur) * $valeur; //calcule de la puissance a ajouter en fonction du rand
$pusmitrailleur = (390 * $mitrailleur) + $pusmitrailleur; //calcule de la puissance des mitrailleur + la valeur calculer avent
$pusattaque = $pusmitrailleur - $pusbouclier; //calcule de la puissance d'attaque en enlevant la valeur des boucliers de la puissance total des mitrailleurs .

if($pusattaque < 0){ // si la puissance d'attaque est inférieur a 0 alors

$fantassinD = 0; // alors le total de fantassin de l'adversaire vos 0

}else{ //sinon on exécute le reste du script

$reste = $puslife - $pusattaque; // on enlève la puissance d'attaque des point de vie

if($reste>0){ //si il reste encore des fantassin en vie

$fantassinD = $reste / 850; // on divise pour retrouver le nombre de fantassin restent
$fantassinD = $fetch['fantassin'] - $fantassinD; //on le déduit du total pour avoir le nombre de perte

}else{ // si il reste personne en vie

$fantassinD = $fetch['fantassin'] ; // $fantassinD prend la valeur du nombre total de fantassin (voir a la fin du programme pour plus de détail)
}
return (
$fantassinD);} //envoi du résultat
}

//attaque des fantassin joueur
if($fantassin>0){

$chiffre = rand(1, 6);//choix de l'uniter qui subira le tire
$valeur = rand(0, 20);
$valeur = $valeur / 100;

switch (
$chiffre) {

case
1://si c'est contre des fantassin

$pusbouclier = 30 * $fetch['fantassin'];
$puslife = 850 * $fetch['fantassin'];
$pusfantassin = (120 * $fantassin) * $valeur;
$pusfantassin = (120 * $fantassin) + $pusfantassin;
$pusattaque = $pusfantassin - $pusbouclier;

if(
$pusattaque<0){

$fantassinD = $fetch['fantassin'];

}else{

$reste = $puslife - $pusattaque;
if(
$reste>0){

$fantassinD = $reste / 850;
$fantassinD = $fetch['fantassin'] - $fantassinD;
}else{

$fantassinD = $fetch['fantassin'];}
}
break;

case
2://si c'est contre des mitrailleur

$pusbouclier = 40 * $fetch['mitrailleur'];
$puslife = 1300 * $fetch['mitrailleur'];
$pusfantassin = (120 * $fantassin) * $valeur;
$pusfantassin = (120 * $fantassin) + $pusfantassin;
$pusattaque = $pusfantassin - $pusbouclier;
if(
$pusattaque<0){

$mitrailleurD = $fetch['mitrailleur'];

}else{

$reste = $puslife - $pusattaque;
if(
$reste>0){

$mitrailleurD = $reste / 1500;
$mitrailleurD = $mitrailleur - $mitrailleurD;

}else{

$mitrailleurD = $mitrailleur;}
}
break;

//tire des mitrailleur joueur

if($mitrailleur>0 AND $fetch['fantassin']>0)//si l'adversaire a des fantassin ferre un tire plus puissent
{
$fantassinDR = mitrailleur ($mitrailleur , $fetch['fantassin']);

}elseif(
$mitrailleur>0){

$valeur2 = rand(0, 20);
$valeur2 = $valeur2 / 100;
switch (
$valeur2) {

case
2:

$pusbouclier = 40 * $fetch['mitrailleur'];
$puslife = 1300 * $fetch['mitrailleur'];
$puimitrailleur = ( 170 * $mitrailleur) * $valeur;
$pusmitrailleur = (170 * $mitrailleur) + $pusmitrailleur;
$pusattaque = $pusmitrailleur - $pusbouclier;

if(
$pusattaque<0){

$mitrailleurD = $fetch['mitrailleur'];

}else{

$reste = $puslife - $pusattaque;

if(
$reste>0){

$mitrailleurD1 = $reste / 1500;
$mitrailleurD1 = $mitrailleur - $mitrailleurD1;

}else{

$mitrailleurD1 = $mitrailleur;}
}
break;

//total des uniters de l'adversaire retente

$fantassinD = $fetch['fantassin'] - $fantassinDR- $fantassinD; //total des fantassin - toute les valeur calculer pour voir le nombre d'uniter restent

if($fantassinD<0){$fantassinD=0;} //si le nombre de fantassin est inférieur alors il est égale a 0

$mitrailleurD = $fetch['mitrailleur'] - $mitrailleurD - $mitrailleurD1;

if(
$mitrailleurD<0){$mitrailleurD=0;}
$fetch['fantassin'] correspond au fantassin de l'adversaire
$fantassin correspond au fantassin du joueur


RE: pb systeme d'attaque - Eluox - 24-03-2008

La valuer negative ne proviendrais pas de ton rand commençant a -20 ?


RE: pb systeme d'attaque - Byleth - 24-03-2008

2 choses : déjà c'est mieux de se présenter avant de balancer un gros pavé comme ça, il y a une section pour
ensuite tu n'es pas dans la bonne partie du forum

Ensuite je pense que tu devrais utiliser le cas "default" dans ton switch.

Je ne comprend pas trop : $mitrailleur et $fantassinD représentent le nombre de soldats ?


RE: pb systeme d'attaque - Sephi-Chan - 24-03-2008

Bonjour,

Généralement, on se présente sur le forum avant de consommer… On ne te reprochera pas d'être trop poli, ne t'inquiète pas.

Concernant le code, il est illisible. Je te conseille de l'indenter, de l'aérer, de mettre des espaces autour des opérateurs et de corriger cet horrible "ferre" (c'est "faire", qu'il faut mettre). De même, des variables plus évocatrices ne pourraient pas faire de mal, avec une notation qui permet de distinguer les différents mots, du genre $puissanceAttaque.

Un petit exemple un peu plus lisible :
Code PHP :
<?php 
function mitrailleur($mitrailleur, $fantassinD){

$valeur = rand(-20, 20); /* Pour faire varier la puissence d'attaque. */
$valeur = $valeur / 100;
$pusbouclier = 30 * $fantassinD;
$puslife = 850 * $fantassinD;
$pusmitrailleur = (390 * $mitrailleur) * $valeur;
$pusmitrailleur = (390 * $mitrailleur) + $pusmitrailleur;
$pusattaque = $pusmitrailleur - $pusbouclier;

if(
$pusattaque < 0){
$fantassinD = 0;
}
else {
$reste = $puslife - $pusattaque;
if(
$reste > 0){
$fantassinD = $reste / 850;
$fantassinD = $fetch['fantassin'] - $fantassinD;
}
else {
$fantassinD = $fetch['fantassin'];
}
$retour = $fantassinD;
return
$retour;
}
}

Je ne peux pas plus t'aider tant l'effort à déchiffrer le code est pénible.


Sephi-Chan


RE: pb systeme d'attaque - Valter - 24-03-2008

Citation : $valeur = rand(-20, 20); /* Pour faire varier la puissence d'attaque. */

Comment la 'puissence d'attaque' peut elle être négative ?


RE: pb systeme d'attaque - Sephi-Chan - 24-03-2008

C'est sans doute un coefficient puisqu'il est réutilisé en tant que facteur du produit $pusmitrailleur. Le problème, c'est justement que le code n'est pas clair ni commenté correctement. Sad


Sephi-Chan


RE: pb systeme d'attaque - Valter - 24-03-2008

Code PHP :
<?php 
function mitrailleur($mitrailleur, $fantassinD){

$valeur = rand(-20, 20);
$valeur /= 100;
$pusbouclier = 30 * $fantassinD;
$puslife = 850 * $fantassinD;
$pusmitrailleur = (390 * $mitrailleur) * $valeur;
$pusmitrailleur += (390 * $mitrailleur);
$pusattaque = $pusmitrailleur - $pusbouclier;

if(
$pusattaque < 0) {
$fantassinD = 0;
}

else {
$reste = $puslife - $pusattaque;
if(
$reste > 0){
$fantassinD = $reste / 850;
$fantassinD -= $fetch['fantassin'];
}
else {
$fantassinD = $fetch['fantassin'];
}
$retour = $fantassinD;
return
$retour;
}
}
// Fin de la fonction mitrailleur

if ($fantassin > 0) {
$chiffre = rand(1, 6);
$valeur = rand(-20, 20); // Pourquoi cette ligne, tu l'a déjà fait ??
$valeur = $valeur / 100; // Pareil :/
switch ($chiffre) {
case
1:
$pusbouclier = 30 * $fetch['fantassin'];
$puslife = 850 * $fetch['fantassin'];
$pusfantassin = (120 * $fantassin) * $valeur;
$pusfantassin += (120 * $fantassin);
$pusattaque = $pusfantassin - $pusbouclier;

if(
$pusattaque < 0) {
$fantassinD=$fetch['fantassin'];
}

else{
$reste = $puslife - $pusattaque; // T'oublies pas un peu de fermer les if ??
if( $reste > 0) {
$fantassinD = $reste / 850;
$fantassinD -= $fetch['fantassin'];
}
else{
$fantassinD = $fetch['fantassin'];
}
}
break;
Plus espacé et légèrement modifié ( pour éviter les a = a + 1; )
Désolé mais je peux pas continuer, je crois que l'auteur a oublié trop de '}'


RE: pb systeme d'attaque - Eluox - 24-03-2008

pour savoir, $fetch est fait en dehors de la fonction, ne faudrait-il pas mettre un global $fetch ?


RE: pb systeme d'attaque - shadow39 - 25-03-2008

Je recalcule la valeur qui fait varier les dégâts a chaque vois car pour l'instant elle est identique mes au final elles seront déférentes pour chaque unités mais il semble bien que la valeur négative provienne bien d'ici.

$mitrailleur correspond au nombre de mitrailleur du joueur
$fantassinD correspond au nombre de fantassin de l'adversaire

voila j'ai fait se que j'ai pu pour être claire dans le code mais hésiter pas a me demander si vous avez besoin de précision