JeuWeb - Crée ton jeu par navigateur
[Résolu] valeur différente pour une variable selon les pts de vie - 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] valeur différente pour une variable selon les pts de vie (/showthread.php?tid=1887)



[Résolu] valeur différente pour une variable selon les pts de vie - L04 - 14-10-2007

Salut

D'abord, désolé si le titre est pas claire.
Je vous explique mon problème.

Lorsque j'attaque quelqu'un, il y a une variable contenant le nombre de pts de vie à soustraire à l'ennemi. Le truc, c'est que si le nombre contenu dans la variable, est plus grand que le nombre de pts de vie restant à l'ennemi, bien il y a une erreur.

J'ai donc imaginé ce système

Si ( variable > pts vie ennemi ) {
alors, variable = ptsvieennemi
}
sinon {
valeur de départ
}

Donc, c'est parfait comme système, sauf que ces variables ne sont pas utilisables a la suite...

Par ce que en dessous de ces deux conditions, ben y a toutes les requetes...

Voici un exemple avec une technique.

Code PHP :
<?php
if ($_POST['attaques'] == "1")
{
$titre = "Brûme de feu";
$chakra = 5;
$pta = 10; // valeur depart enlève tel pts a ennemi
if ($pta> $menaces['ptsvie'])
{
$ptsvie = $menaces['ptsvie'];
}
else {
$ptsvie = 10;
}
// ptsvie = au nombre de pts qu'enlève lattaque
$ptsvieperdu = 10;
if (
$profil['chakrestant'] < $chakra) // Si chakra restant < que chakra demandé
{
$message = "<strong>".$_SESSION['pseudo']."</strong> essaie d'attaquer, mais n'a pas assez de chakra. Il est pris de surprise par l'ennemi et est attaqué. Il perd <strong>".$ptsvieperdu."</strong> points de vie";
$calculmoins = $profil['ptsvierest'] - $ptsvieperdu;
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."' '".time()."')") or die(mysql_error());
mysql_query("UPDATE membres SET ptsvierest='".$calculmoins."' WHERE id='".$_SESSION['id']."'");
echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';

}
else {
$message = "<strong>".$_SESSION['pseudo']."</strong> attaque avec ".$titre.", et enlève ".$ptsvie." de pts de vie à l'ennemi. Il perd ".$chakra.".";
$message2 = "<strong>L'ennemi</strong> contre-attaque et fait perdre ".$ptsvieperdu." points de vie à ".$_SESSION['pseudo'].".";
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."', '".time()."')");

mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message2)."', '".time()."')");
$calculmoinsennemi = $menace['ptsvie'] - $ptsvie; // Calcul combien on enlève de pts a l'ennemi
$calculmoinschakraforme = $profil['chakrestant'] - $chakra; // calcul comb. enl. chakra a moi
$calculmoinsptsforme = $profil['ptsvierest'] - $ptsvieperdu; // calcul combien je perds a cause ennemi
mysql_query("UPDATE membres SET chakrestant='".$calculmoinschakraforme."', ptsvierest='".$calculmoinsptsforme."' WHERE id='".$_SESSION['id']."'");
mysql_query("UPDATE menaces SET ptsvie='".$calculmoinsennemi."' WHERE id='".mysql_real_escape_string($_GET['id'])."'");
echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';

}
}
?>

Voilà,
désolé si je suis pas claire.

L.


RE: valeur différente pour une variable selon les pts de vie - exopi - 15-10-2007

Code :
if ($pta> $menaces['ptsvie'])
            {
                $ptsvie = $menaces['ptsvie'];
            }
            else {
                $ptsvie = 10;
            }

A mon avis, remplace
Code :
$ptsvie = 10;
par
Code :
$ptsvie = 10;
$menaces['ptsvie']=10;


bon la t'as pas mis tout le code, come par exemple comment on a la variable menaces, etc
donc je peux pas t'aider plus... mais si tu fais pas ce qu eje dit, bah à ce moment :
Code :
$calculmoinsennemi = $menace['ptsvie'] - $ptsvie;
$calculmoinsennemi va devenir positif si
Code :
$pta<= $menaces['ptsvie']
donc ca va donner de la vie aux ennemis surement ?



ps : j'ai du mal a comprendre ton code, donc ca se trouve je dit n'importe quoi...


RE: valeur différente pour une variable selon les pts de vie - appzer0 - 16-10-2007

Hum, concrètement, tu dis que tu as une erreur quand les points de vie ennemi deviennent négatifs ?

N'as-tu pas un test du genre : "si points_de_vie_ennemi inférieur ou égal à 0 alors l'ennemi est mort" ? Wink

Juste pour situer le problème hein :p !


RE: valeur différente pour une variable selon les pts de vie - Byleth - 17-10-2007

Qu'entends tu par

Citation :Donc, c'est parfait comme système, sauf que ces variables ne sont pas utilisables a la suite...

?[/quote]


RE: valeur différente pour une variable selon les pts de vie - L04 - 17-10-2007

Salut

Tout d'abord, merci à tous pour les réponses et désolé du retard.
Appzer0, ben c'est une idée mais j'aurais voulu finir un peu comme j'ai commencé, changer la valeur d'une variable. Car le script est très lourd, il y a 36 techniques, donc dans les 70 conditions...Et faire en plus une uatre condition pour une requete différente, ben ça rendra le script super lourd.

Byleth, bien ces variables sont dans des conditions, et donc ne sont pas utilisables en dehors de ces conditions...

Je vais essayer cet aprem de trouver unmoyen simple, sinon lj'utiliserai la solution de Appzer0.

L.


RE: valeur différente pour une variable selon les pts de vie - L04 - 17-10-2007

salut

Désoléé de vous déranger mais j'ai encore un problème.
Donc j'ai refait un code, et il ne veut otujours pas marcher ! Je sais vramient pas quoi faire je vais devenir fou. Unefois il fait les actions, d'autres pas...
J?ai commenté le code, j'espère que ça ira...
Code PHP :
<?php
session_start
();
if (empty(
$_SESSION['pseudo']))
{
header('Location: ../index.php');
}
else {

}
if (empty(
$_GET['id']))
{
header('Location: ../index.php');
}
include (
'config.php');
bdd();
$men = mysql_query("SELECT * FROM menaces WHERE id='".addslashes(mysql_real_escape_string($_GET['id']))."'");
$menace = mysql_fetch_array($men);
$profil1 = mysql_query("SELECT * FROM membres WHERE id='".$_SESSION['id']."'");
$profil = mysql_fetch_array($profil1);
?>
<?php

if ($_POST['attaques'] == "1")
{
$titre = "Brûme de feu"; // Titre de la technique
$chakra = 5; // Chakra utilisé
$calculmoinschakraforme = $profil['chakrestant'] - $chakra; // calcul comb. enl. chakra a moi
$attaque = 10; // Puissance de l'attaque
$ptsvieperdu = 10; // L'ennemi m'enlève ces pts
$argent = 30;
if (
$profil['chakrestant'] < $chakra) // Si chakra restant < que chakra demandé
{
if (
$profil['ptsvierest'] < $ptsvieperdu or $profil['ptsvierest'] == $ptsvieperdu) // Si my pts vi, < o = ke att enne
{
$message = "<strong>".$_SESSION['pseudo']."</strong> essaie d'attaquer, mais n'a pas assez de chakra. Il est pris de surprise par l'ennemi et est attaqué. Il perd les points de vie restant et perd le combat.<br /><div align='center' style='color: red; font-weight: bold;'>Défaite de L04</div>";


mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."' '".time()."')");

mysql_query("UPDATE membres SET ptsvierest='0' WHERE id='".$_SESSION['id']."'");

echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';
}
else {
// Sinon, on perd que kk pts de vie
$message = "<strong>".$_SESSION['pseudo']."</strong> essaie d'attaquer, mais n'a pas assez de chakra. Il est pris de surprise par l'ennemi et est attaqué. Il perd <strong>".$ptsvieperdu."</strong> points de vie";
$calculmoins = $profil['ptsvierest'] - $ptsvieperdu;
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."' '".time()."')");
mysql_query("UPDATE membres SET ptsvierest='".$calculmoins."' WHERE id='".$_SESSION['id']."'");
echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';
}

}
else {


if (
$attaque > $menace['ptsvie'] or $attaque == $menace['ptsvie']) // Si attaque > o = a pts vie enn
{
$message = "<strong>".$_SESSION['pseudo']."</strong> attaque l\'ennemi et lui enlève tous ses points de vie.";

mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."' '".time()."')");

mysql_query("UPDATE menaces SET ptsvie='0', active='0' WHERE id='".mysql_real_escape_string($_GET['id'])."'");

mysql_query("UPDATE membres SET chakrestant='".$calculmoinschakraforme."' WHERE id='".$_SESSION['id']."'");

if (isset(
$menace['pseudomission']) and empty($menace['pseudomission2']) and empty($menace['pseudomission3']))
{

$argentdivise = $argent;
$pseudo1 = addslashes($menace['pseudomission']);
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo1."'");
$messagea = "<div align='center' style='color: green; font-weight: bold;'>
<u>Succès de la mission</u>
"
.$pseudo1." gagne ".$argentdivise." pièces d'or
</div>"
;
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($messagea)."' '".time()."')");
}
elseif (isset(
$menace['pseudomission']) and isset($menace['pseudomission2']) and empty($menace['pseudomission3']))

{
$argentdivise = $argent / 2;
$pseudo1 = addslashes($menace['pseudomission']);
$pseudo2 = addslashes($menace['pseudomission2']);
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo1."'");
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo2."'");
$messagea = "<div align='center' style='color: green; font-weight: bold;'>
<u>Succès de la mission</u>
"
.$pseudo1." & ".$pseudo2." gagnent chacuns ".$argentdivise." pièces d'or
</div>"
;
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($messagea)."' '".time()."')");
}
elseif (isset(
$menace['pseudomission']) and isset($menace['pseudomission2']) and isset($menace['pseudomission3']))
{
$argentdivise = $argent / 3;
$pseudo1 = addslashes($menace['pseudomission']);
$pseudo2 = addslashes($menace['pseudomission2']);
$pseudo3 = addslashes($menace['pseudomission3']);
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo1."'");
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo2."'");
mysql_query("UPDATE membres SET argent='".$argentdivise."' WHERE pseudo='".$pseudo3."'");
$messagea = "<div align='center' style='color: green; font-weight: bold;'>
<u>Succès de la mission</u>
"
.$pseudo1.", ".$pseudo2." & ".$pseudo3." gagnent chacuns ".$argentdivise." pièces d'or
</div>"
;
mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($messagea)."' '".time()."')");
}
echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';
}





else {
// Sinon, on enlève que kk pts de vie
$message = "<strong>".$_SESSION['pseudo']."</strong> attaque avec ".$titre.", et enlève ".$ptsvie." de pts de vie à l'ennemi. Il perd ".$chakra.".";

$message2 = "<strong>L'ennemi</strong> contre-attaque et fait perdre ".$ptsvieperdu." points de vie à ".$_SESSION['pseudo'].".";

mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message)."', '".time()."')");

mysql_query("INSERT INTO combat_menace VALUES('', '".mysql_real_escape_string($_GET['id'])."', '".addslashes($message2)."', '".time()."')");

$calculmoinsennemi = $menace['ptsvie'] - $attaque; // Calcul combien on enlève de pts a l'ennemi



$calculmoinsptsforme = $profil['ptsvierest'] - $ptsvieperdu; // calcul combien je perds a cause ennemi

mysql_query("UPDATE membres SET chakrestant='".$calculmoinschakraforme."', ptsvierest='".$calculmoinsptsforme."' WHERE id='".$_SESSION['id']."'");

mysql_query("UPDATE menaces SET ptsvie='".$calculmoinsennemi."' WHERE id='".mysql_real_escape_string($_GET['id'])."'");

echo
'<META http-equiv="refresh" content="0; URL=combat_niveau_vert.php?id='.$_GET['id'].'">';
}
}
}
?>

<?php
mysql_close
();
?>

Merci d'avance,
l


RE: valeur différente pour une variable selon les pts de vie - Byleth - 18-10-2007

L04 a écrit :Byleth, bien ces variables sont dans des conditions, et donc ne sont pas utilisables en dehors de ces conditions...

Voilà autre chose, c'est dans les fonctions que les variables doivent être retournées, pas dans les conditions.

T'as vérifié? Ou alors j'ai rien capté....


RE: valeur différente pour une variable selon les pts de vie - naholyr - 18-10-2007

min() et max() sont parfaits pour ça.

À ta place je m'arrêterais à la remarque d'appzer0 : il t'explique que tu ne prends pas le problème par le bon bout. Tu ne dois pas limiter le nombre de dommages infligeables au nombre de points de vie de la cible, mais plutôt redéfinir la notion de mort. Si tu continues sur la voie que tu veux suivre actuellement tu galèreras le jour où tu voudras gérer les effets de zone...

Ce n'est pas au moment de calculer les dégats à infliger ou reçus qu'il faut limiter. L'endroit où je placerais cette limitation serait dans la méthode "perdrePV" Wink ou au lieu de faire "$pv = $pv - $degats" je ferais "$pv = max(0, $pv - $degats)". Ainsi impossible d'avoir des PV négatifs.


RE: valeur différente pour une variable selon les pts de vie - L04 - 18-10-2007

Ha, merci beacuoup à tous Smile
Bien je vais revoir mon code.

On va donc dire: [problème résolu]

L.