JeuWeb - Crée ton jeu par navigateur
Probleme tir Canon - 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 : Probleme tir Canon (/showthread.php?tid=883)

Pages : 1 2


RE: Probleme tir Canon - icien - 01-03-2007

A mon avis ca ne vient pas de la, mais:
Code PHP :
<?php 
if($portee_X>$distance OR $portee_Y>$distance )/////Le joueur peut-t-il tirez aussi loin ?////
$distance est le tableau ou tu mets le résultat de la requêtequi te permet de récupérér l'id de l'arme (donc mauvais choix de nom de variable...) a mon avis tu voulais mettre $portee_max.

ici :
Code PHP :
<?php 
$nouv_terrain
= $db->extract_one("SELECT modif FROM terrain WHERE id='$anc_terrain'"); $modif=$nouv_terrain['terrain'];
il faut mettre
Code PHP :
<?php 
$modif
=$nouv_terrain['modif'];

ici:
Code PHP :
<?php 
$zone_cible
= $db->extract_one("SELECT perso,bat FROM map WHERE X='$X' AND Y='$Y'"); //(1)
$perso=$zone_cible['perso'];
$bat=$zone_cible['bat'];
if(
$bat==0 AND $perso==0 )///Si la zone ne contient pas de perso ou de batiment///

...

if(
$bat==1 )///Si la case visé contient un batiment
{
$bat_cible = $db->extract_one("SELECT bat FROM map WHERE X='$X' AND Y='$Y'"); (2)
$bat=$bat_cible['bat'];

...

if(
$perso==1 )///Si la case visé contient un perso
{
$qui_cible = $db->extract_one("SELECT perso FROM map WHERE X='$X' AND Y='$Y'"); (3)
$perso=$qui_cible['perso'];
...
$map et $perso sont déja le résultat d'une requete sur ta table map en (1)
donc logiquement tu n'as pas besoin de (2) et (3)
par contre comme tes if($perso==1) et if($bat==1) font que le tir ne passera que si la cible est le perso avec l'id 1 et le batiment avec l'id 1. Il faut donc a mon avis mettre if($perso!=0) et if($bat!=0).

Sinon pour ton probleme de page blanche c'est surement un problème de }


RE: Probleme tir Canon - kaoteknik - 01-03-2007

Un petit conseil qui pourrait t'aider à isoler le problème : à la suite de chacune de tes requêtes ajoute la fonction mysql_error ; par exemple tu pourrais écrire ceci :

Code PHP :
<?php 
extract_one
("SELECT arme FROM membres WHERE id='$id'") or die (mysql_error());

Voilà, comme ça si ta page ne fonctionne pas, peut-être qu'au lieu d'avoir une page blanche tu auras un beau message d'erreur SQL ! :p

Un petit truc, lorsqu'il m'arrive d'avoir un message d'erreur, je copie/colle ce message sur google et, en moins de temps qu'il n'en faut pour le dire, je trouve une réponse et la solution à ma bêtise ! Smile


RE: Probleme tir Canon - Pyl - 02-03-2007

Bon, désolé pour la réponse tardive mais j'ai quelques problémes de santé...
J'ai effectué ce que vous m'avais dit hormis le retrait des requettes ^^
Sauf que j'ai toujours une jolie page blanche et aucun message d'erreurs.

Code PHP :
<?
include('bdd.php');
@
session_start();
$id=$_SESSION['id'];
$perso=$_SESSION['perso'];
include(
'function.php');
$type=$dep[0];
$message1='';

$X =$_POST['X'];
$Y =$_POST['Y'];

if(
$X=="" || $Y=="") ////Les champs sont'ils remplient ?///
{
$message1.='<center>Vous devez obligatoirement rentrer des coordonnées </center>';
}
else
{
$distance = $db->extract_one("SELECT arme FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$distance['arme'];
$portee = $db->extract_one("SELECT distance FROM armes WHERE id='$id_arme'") or die (mysql_error());
$portee_max=$portee['distance'];
$position_joueur = $db->extract_one ("SELECT X,Y FROM map WHERE perso='id'") or die (mysql_error());
$X1=$position_joueur['X'];
$Y1=$position_joueur['Y'];
$portee_X = $X-$X1;
$portee_Y = $Y-$Y1;
if(
$portee_X>$portee_max AND $portee_Y>$portee_max )/////Le joueur peut-t-il tirez aussi loin ?////
{
$message1.='<center>Votre canon ne tir pas aussi loin que ça !</center>';
}
else
{
switch(
$type)
{
case
'perso':
//info sur le perso
$perso = $db->extract_one("SELECT arme,attaque,camp FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$perso['arme'];
$attaque=$perso['attaque'];
$camp=$perso['camp'];
$armes = $db->extract_one("SELECT degats,calibre FROM armes WHERE id='$id_arme'") or die (mysql_error());
$degats=$armes['degats'];
$calibre=$armes['calibre'];
///Info zone ciblé
$zone_cible = $db->extract_one("SELECT perso,bat FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$perso=$zone_cible['perso'];
$bat=$zone_cible['bat'];
if(
$bat!=0 AND $perso!=0 )///Si la zone ne contient pas de perso ou de batiment///
{
if(
$calibre=>100 )///Si le calibre de l'arme est supérieure ou égale à 100
{
$modif_terrain = $db->extract_one("SELECT terrain FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$anc_terrain=$modif_terrain['terrain'];
$nouv_terrain = $db->extract_one("SELECT modif FROM terrain WHERE id='$anc_terrain'") or die (mysql_error());
$modif=$nouv_terrain['modif'];
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = ("UPDATE map SET terrain= '$modif' WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$sql = ("UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'") or die (mysql_error());
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.'</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
else
{
if(
$bat==1 )///Si la case visé contient un batiment
{
$bat_cible = $db->extract_one("SELECT bat FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$bat=$bat_cible['bat'];
$bat1 = $db->extract_one("SELECT resistance,camp FROM batiments WHERE id='$bat'") or die (mysql_error());
$resistance=$bat1['resistance'];
$camp=$bat1['camp'];
$nouvelle_resistance = $resistance-$degats;
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = "UPDATE batiments SET resistance = '$nouvelle_resistance' WHERE id='$bat'";
$camp_joueur = $db->extract_one("SELECT camp FROM membres WHERE id='$id'");
if (
$camp==$camp_joueur) $gain_xp=rand(-2,0);
if (
$camp!=$camp_joueur) $gain_xp=rand(1, 3);
xp($gain_xp,$id);
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.' Nos premiéres Lignes rapportent que vous avez endommagé un batiments.<br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
else
{
if(
$perso==1 )///Si la case visé contient un perso
{
$qui_cible = $db->extract_one("SELECT perso FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$perso=$qui_cible['perso'];
$cible_perso = $db->extract_one("SELECT pv,camp FROM membres WHERE id='$perso'") or die (mysql_error());
$pv_cible=$perso_cible['pv'];
$camp=$perso_cible['camp'];
$nouveau_pv=$pv_cible-$degats;
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = "UPDATE membres SET pv = '$nouveau_pv' WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
$sql = "UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
$message1.='<center>Vous avez touchez la case '.$X.'/'.$Y.' avec '.$degats.' de dégats.</center>';
if (
$camp==$camp_cible) $gain_xp=rand(-2,0);
if (
$camp!=$camp_cible) $gain_xp=rand(3, 5);
xp($gain_xp,$id);
$message1.='<center><br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
////Si le perso meurt
if($nouveau_pv<='0' )
{
$message1.='<center>Celui-ci s\'écroule par terre, il est mort...</center>';
////On retire la cible de la map
$sql = "UPDATE map SET perso = '0' WHERE perso='$id_cible'";
$req = mysql_query($sql) or die(mysql_error());
/////On met a jour les pv's et le nombre de mort de la victime
$sql = "UPDATE membres SET mort = mort+1 ,pv = pv_max WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
////On met a jour les Xp's si necessaire
$mort1 = $db-> extract_one("SELECT mort FROM membres WHERE id='$perso'");
$mort = $mort1['mort'];
if(
$mort==10)
{
$cible1 = $db-> extract_one("SELECT xp FROM membres WHERE id='$perso'");
$xp=$cible1['xp'];
$perte_xp=$xp * 20/100;
$new_xp=$xp-$perte_xp;
$sql = "UPDATE membres SET xp = '$new_xp' ,mort = '0' WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
}
////On met a jour le nombdre de victime du joueur.
$sql = "UPDATE membres SET victime = victime+1 WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
}
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
}
break;
}

}
}
$_SESSION['message1']=$message1;
header('location: jouer.php');
?>



RE: Probleme tir Canon - icien - 02-03-2007

ben une chose qui me frappe c'est qu'il n'y a aucun "echo" dans ton code donc c'est logique que rien ne s'affiche...

mets en un ici déjà pour voir si c'est bien ce script qui pose problème:
Code PHP :
<?
include('bdd.php');
@
session_start();
...
...
$_SESSION['message1']=$message1;
//ajout pour debug.
echo $message1;
//fin d'ajout.
// header('location: jouer.php'); // on enleve la redirection. pour le debug.
?>
J'ai aussi enlevé la redirection pour voir ce qu'affiche l'"echo".

si ça affiche quelque chose c'est que ton problème vient de jouer.php


RE: Probleme tir Canon - Pyl - 03-03-2007

Le probleme vient de canon_tir.pjp

Rien n'est c'est affiché et ma page est resté blanche..


RE: Probleme tir Canon - Pyl - 04-03-2007

Up !
J'ai apporté quelques modification au script mais ça ne marche tjrs pas...

Code PHP :
<?
include('bdd.php');
@
session_start();
$id=$_SESSION['id'];
include(
'function.php');
$type=$dep[0];
$message1='';

switch(
$type)
{
case
'perso':
$X=$_POST['X'];
$Y=$_POST['Y'];

if(
$X=="" || $Y=="") ////Les champs sont'ils remplient ?///
{
$message1.='<center>Vous devez obligatoirement rentrer des coordonnées </center>';
}
else
{
$distance = $db->extract_one("SELECT arme FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$distance['arme'];
$portee = $db->extract_one("SELECT distance FROM armes WHERE id='$id_arme'") or die (mysql_error());
$portee_max=$portee['distance'];
$position_joueur = $db->extract_one ("SELECT X,Y FROM map WHERE perso='$id'") or die (mysql_error());
$X1=$position_joueur['X'];
$Y1=$position_joueur['Y'];
$portee_X=$X-$X1;
$portee_Y=$Y-$Y1;
if(
$portee_X>$portee_max OR $portee_Y>$portee_max )/////Le joueur peut-t-il tirez aussi loin ?////
{
$message1.='<center>Votre canon ne tir pas aussi loin que ça !</center>';
}
else
{
//info sur le perso
$perso = $db->extract_one("SELECT arme,attaque,camp FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$perso['arme'];
$attaque=$perso['attaque'];
$camp=$perso['camp'];
$armes = $db->extract_one("SELECT degats,calibre FROM armes WHERE id='$id_arme'") or die (mysql_error());
$degats=$armes['degats'];
$calibre=$armes['calibre'];
///Info zone ciblé
$zone_cible = $db->extract_one("SELECT perso,bat FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$perso=$zone_cible['perso'];
$bat=$zone_cible['bat'];
if(
$bat==0 AND $perso==0 )///Si la zone ne contient pas de perso ou de batiment///
{
if(
$calibre=>100 )///Si le calibre de l'arme est supérieure ou égale à 100
{
$modif_terrain = $db->extract_one("SELECT terrain FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$anc_terrain=$modif_terrain['terrain'];
$nouv_terrain = $db->extract_one("SELECT modif FROM terrain WHERE id='$anc_terrain'") or die (mysql_error());
$modif=$nouv_terrain['modif'];
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = ("UPDATE map SET terrain= '$modif' WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$sql = ("UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'") or die (mysql_error());
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.'</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
else
{
if(
$bat!=0 )///Si la case visé contient un batiment
{
$bat1 = $db->extract_one("SELECT resistance,camp FROM batiments WHERE id='$bat'") or die (mysql_error());
$resistance=$bat1['resistance'];
$camp=$bat1['camp'];
$nouvelle_resistance=$resistance-$degats;
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = "UPDATE batiments SET resistance = '$nouvelle_resistance' WHERE id='$bat'";
$camp_joueur = $db->extract_one("SELECT camp FROM membres WHERE id='$id'");
if (
$camp==$camp_joueur) $gain_xp=rand(-2,0);
if (
$camp!=$camp_joueur) $gain_xp=rand(1, 3);
xp($gain_xp,$id);
$message1.='<center>Vous avez touché la case '.$X.'/'.$Y.' Nos premiéres Lignes rapportent que vous avez endommagé un batiments.<br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
else
{
if(
$perso!=0 )///Si la case visé contient un perso
{
$cible_perso = $db->extract_one("SELECT pv,camp FROM membres WHERE id='$perso'") or die (mysql_error());
$pv_cible=$perso_cible['pv'];
$camp=$perso_cible['camp'];
$nouveau_pv=$pv_cible-$degats;
$attaque_restant=$attaque-1;
if(
$attaque!='0')
{
$sql = "UPDATE membres SET pv = '$nouveau_pv' WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
$sql = "UPDATE membres SET attaque = '$attaque_restant' WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
$message1.='<center>Vous avez touchez la case '.$X.'/'.$Y.' avec '.$degats.' de dégats.</center>';
if (
$camp==$camp_cible) $gain_xp=rand(-2,0);
if (
$camp!=$camp_cible) $gain_xp=rand(3, 5);
xp($gain_xp,$id);
$message1.='<center><br>Vous gagnez '.$gain_xp.' Xp\'s</center>';
////Si le perso meurt
if($nouveau_pv<='0' )
{
$message1.='<center>Celui-ci s\'écroule par terre, il est mort...</center>';
////On retire la cible de la map
$sql = "UPDATE map SET perso = '0' WHERE perso='$id_cible'";
$req = mysql_query($sql) or die(mysql_error());
/////On met a jour les pv's et le nombre de mort de la victime
$sql = "UPDATE membres SET mort = mort+1 ,pv = pv_max WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
////On met a jour les Xp's si necessaire
$mort1 = $db-> extract_one("SELECT mort FROM membres WHERE id='$perso'");
$mort = $mort1['mort'];
if(
$mort!=10)
{
$cible1 = $db-> extract_one("SELECT xp FROM membres WHERE id='$perso'");
$xp=$cible1['xp'];
$perte_xp=$xp * 20/100;
$new_xp=$xp-$perte_xp;
$sql = "UPDATE membres SET xp = '$new_xp' ,mort = '0' WHERE id='$perso'";
$req = mysql_query($sql) or die(mysql_error());
}
////On met a jour le nombdre de victime du joueur.
$sql = "UPDATE membres SET victime = victime+1 WHERE id='$id'";
$req = mysql_query($sql) or die(mysql_error());
}
}
else
{
$message1.='<center>Vous n\'avez plus d\'attaque.</center>';
}
}
}
}
break;
}

}
}
$_SESSION['message1']=$message1;
header('location: jouer.php');
?>



RE: Probleme tir Canon - Raoull - 05-03-2007

Tu es sur que le probleme ne vient pas dans "jouer.php", si rien ne s'affiche dans cette page (jouer.php) c'est la que tu devrais chercher en priorité.

Une chose quand même, il faut prévoir toutes les erreurs possibles, et là dans tes requètes, surtout les SELECT, hop tu utilises le résultat direct sans vérifier si tu as des résultats, avec un simple mysql_num_rows() par exemple.

Pour déboguer cette page là, pas de mysteres : tu enlèves la redirection et tu mets des echo "blabla" partout, en essayant d'afficher l'état de tes variables, partout pour voir par ou passe ton code, et si il fait bien ce qu'il est censé faire...

et un simple echo $message1 en bas, à la place de ta redirection, pour voir.
Et si tout se passe bien, c'est que le probleme vient bien de joueur.php...


RE: Probleme tir Canon - nemesis_elite - 05-03-2007

Dis donc, on pourrait pas alleger un peu ça ? par de jolies jointures ?
Code PHP :
<?php 
$distance
= $db->extract_one("SELECT arme FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$distance['arme'];
$portee = $db->extract_one("SELECT distance FROM armes WHERE id='$id_arme'") or die (mysql_error());
$portee_max=$portee['distance'];
.....
//info sur le perso
$perso = $db->extract_one("SELECT arme,attaque,camp FROM membres WHERE id='$id'") or die (mysql_error());
$id_arme=$perso['arme'];
$attaque=$perso['attaque'];
$camp=$perso['camp'];
$armes = $db->extract_one("SELECT degats,calibre FROM armes WHERE id='$id_arme'") or die (mysql_error());
$degats=$armes['degats'];
$calibre=$armes['calibre'];
...........
$modif_terrain = $db->extract_one("SELECT terrain FROM map WHERE X='$X' AND Y='$Y'") or die (mysql_error());
$anc_terrain=$modif_terrain['terrain'];
$nouv_terrain = $db->extract_one("SELECT modif FROM terrain WHERE id='$anc_terrain'") or die (mysql_error());

Sur tout le code que tu nous a donné, je compte 22 requêtes.Alors que tu pourrais en avoir moin d'une vingtaine.

[EDIT] Je sais je chipotte un peu ^^ Mais bon, j'dis çà, j'dis rien ! ^^


RE: Probleme tir Canon - Pyl - 05-03-2007

Raoull a écrit :Tu es sur que le probleme ne vient pas dans "jouer.php", si rien ne s'affiche dans cette page (jouer.php) c'est la que tu devrais chercher en priorité.

Une chose quand même, il faut prévoir toutes les erreurs possibles, et là dans tes requètes, surtout les SELECT, hop tu utilises le résultat direct sans vérifier si tu as des résultats, avec un simple mysql_num_rows() par exemple.

Pour déboguer cette page là, pas de mysteres : tu enlèves la redirection et tu mets des echo "blabla" partout, en essayant d'afficher l'état de tes variables, partout pour voir par ou passe ton code, et si il fait bien ce qu'il est censé faire...

et un simple echo $message1 en bas, à la place de ta redirection, pour voir.
Et si tout se passe bien, c'est que le probleme vient bien de joueur.php...

le echo $message1 en bas a déjà étè essayé et sans resultat, quand le script bloque c'est sur canon_tir.php, la page blanche est canon_tir.php.

Pour réduire le nombre de requete bah oui j'envisage de le faire Smile

Je viens de titler ^^
Sur les autres scripts d'attaque on reste sur jouer.php, alors que le probleme que je rencontre là c'est qu'il cherche à m'afficher quelques choses sur canon_tir.php car quand je clique sur tirez l'url devient lagrandeguerre.info/canon_tir.php chose qui ne se passe pas avec les autres systemes de tir