JeuWeb - Crée ton jeu par navigateur
[Résolu] Continuer combat tant que le défenseur n'est pas mort - 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 : [Résolu] Continuer combat tant que le défenseur n'est pas mort (/showthread.php?tid=193)

Pages : 1 2


[Résolu] Continuer combat tant que le défenseur n'est pas mort - Ginobili - 17-03-2008

Bonjour,

Je souhaite créer un système de combat pour mon jeu PHP. En fait je voudrais que les dégâts soient aléatoires tirés dans une tranche différente pour chaque joueur (jusque là pas de problème). Puis ces dégâts sont soustraient de la vie du joueur attaqué.

Mais il faudrait que le script continue tant que le joueur n'est pas mort (donc sa vie = 0). et là je bloque.

Exemple : Le joueur attaqué a 100 de vie. L'attaquant fait de 39 à 43 de degats. Il faut donc que le script choisisse différentes valeurs entre 39 et 43 (bon la sa va ^^). mais il faut qu'il en choisisse plusieurs afin que la vie défenseur soit nulle !

Par exemple il choisirait
43 => vie defenseur = 57
40 => vie defenseur = 17
39 => vie defenseur = 0

Je pense donc à une boucle mais je ne vois vraiment pas ...


RE: Continuer combat tant que le défenseur n'est pas mort - SorenS - 17-03-2008

while(vie_defenseur>0)
{
// instructions
}
Non?

PS : se présenter ne fait jamais de mal. [dans la section appropriée]


RE: Continuer combat tant que le défenseur n'est pas mort - Spoutnik - 17-03-2008

Bonsoir,

Tu peux utiliser une boucle, comme tu le pensais:

Code PHP :
<?php 
$vie
=100;
$degat_max=43;
$degat_min=29;
$log='';

while(
$vie>0) { // tant que la vie est supérieur à 0

$degat=rand($degat_min,$degat_max);

if(
$vie<$degat) { // il faut afficher des dégâts cohérents tout de même, mais ça c'est toi qui voit.
$degat=$vie;
}

$vie-=$degat; // hop, on soustrait les dégâts

$log.='X inflige '.$degat.' points de dégâts à Y.'; // tu peux faire un log de combat comme ça

}

(désolé pour l'indentation)

J'espère que ça t'aidera même si je pense que c'est loin d'être parfait =)

edit: grilled by SorenS :p


RE: Continuer combat tant que le défenseur n'est pas mort - Ginobili - 17-03-2008

Tout d'abord merci bien pour les réponses !

Ce script marche très bien mais je voudrais donc que la vie se mette à jour dans la bdd à chaque fois que le joueur subit un degat (logique). Je voulais faire un UPDATE .... mais lorsque je le met dans la boucle ca m'affiche une boucle infinie avec des valeurs qui n'arrete pas de défiler !!

Comment faire ? Merci d'avance.

PS : pour la présentation je vais y aller ^^:good:


RE: Continuer combat tant que le défenseur n'est pas mort - Spoutnik - 17-03-2008

C'est normal, petite erreur dans mon script:

change: while($vie>0) en while($vie>=0)

Ça devrait mieux marcher =)

Mea Culpa. Bonne soirée, Spoutnik.


RE: Continuer combat tant que le défenseur n'est pas mort - SorenS - 17-03-2008

héhé Spoutnik Big Grin

Pour la boucle infinie, changer: while($vie>0) en while($vie>=0) ne résoudra pas le problème.
Le while while($vie>0) arrête la boucle à un moment, dès que $vie == 0 ou est inférieur. Je ne vois pas pourquoi elle devient infinie.
Ginobili a du faire une autre erreur...

{Je me goure peut-être}


RE: Continuer combat tant que le défenseur n'est pas mort - Ginobili - 17-03-2008

Ok je vient de trouver. Mais une dernière question :
$user_def["vie"]-=$degat;

Voila c'est ici. Je ne sait pas quoi mettre dans mon UPDATE.

$maj = mysql_query("UPDATE ressource SET vie='?????' WHERE user = '$membre' ");

Voila que mettre ici ?

EDIT = comme a dit SorenS changer while($vie>0) en while($vie>=0) n'a rien résolu. Au contraire la boucle ne pouvait pas s'arreter !


RE: Continuer combat tant que le défenseur n'est pas mort - Spoutnik - 17-03-2008

(pour ceux qui l'auraient vu, je viens de poster, j'avais mal lu le post de SorenS d'où mon delete).

En effet, après avoir mieux regardé, tu as raison. Mea culpa, again :p J'ai bien une excuse pour ma défense, l'inattention ! Va falloir que je fasse plus gaffe ^^'
Encore pardon.

Met $user_def["vie"] Smile
edit: si tu n'es pas sûr: $new_vie=$user_def["vie"]-$degat;
En fait je ne suis plus sûr non plus, de la façon d'agir de mon $vie-=$degat ^^'

Bonne soirée, Spoutnik.


RE: Continuer combat tant que le défenseur n'est pas mort - SorenS - 17-03-2008

Ben tu mets la variable $vie_defenseur que tu modifies à chaque dégâts...


RE: Continuer combat tant que le défenseur n'est pas mort - Ginobili - 17-03-2008

Code :
while($user_def["vie"] > 0) { // tant que la vie est supérieur à 0

$degat=rand($user["degats_min"],$user["degats_max"]);

$new_vie=$user_def["vie"]-$degat;

$maj = mysql_query("UPDATE ressource SET vie='$new_vie' WHERE user = '$membre' ");

echo 'X inflige '.$degat.' points de dégâts à Y.'; // tu peux faire un log de combat comme ça
}

Voila j'ai fais comme tu m'as dit mais la .... boucle infinie ... Les degats apparaissent par centaines !!