JeuWeb - Crée ton jeu par navigateur
[réglé] Apres la carte / le déplacement sur la carte - 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églé] Apres la carte / le déplacement sur la carte (/showthread.php?tid=1368)

Pages : 1 2 3 4


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

Bah pas vraiement je lui demande de modifier manchin AND machin...
Vais tenter une virgule

EDIT : la virgule foctionne a la requete sql, mais mon script ne foncctionne toujours pas :'(


RE: Apres la carte / le déplacement sur la carte - Nessper - 27-06-2007

tente à ma façon.....


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

J'ai trouvé la solution :

Code PHP :
<?php 
case 'N_O':
$coord_x = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_x'] = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_x']-1;
$coord_y = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_y'] = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_y']+1;
mysql_query("UPDATE profil_joueurs SET coord_x = '$coord_x', coord_y = '$coord_y' WHERE pseudo = '$pseudo' ");
break;

Et ça fonctionne impec, maintenant faut que je vérifie s'il n'y a personne sur la case, et la c'est une autre affaire -_-


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

La je cafouille :S

La fonction que je voudrai faire pour empecher le déplacement lors de la validatioon du mouvement :
Code PHP :
<?php 
$resultat
= NULL;
$resultat = mysql_query("SELECT * FROM profil_joueurs WHERE coord_x=='$x' and coord_y=='$y'");
if (
$resultat == NULL)
return
TRUE;
else
return
FALSE;

Seuelement, $resultat se rempli automatiquement de quelque chose lors de l'éxécution de la requete, mais s'il n'y a aucun résultat...
Est ce qu'il y a un moyen de faire fonctionner ce script, ou, avant de valider le déplacement, ne laisser apparaitre sur mon "carré" de choix de déplacement, que les endroit possible ou se déplacer.


RE: Apres la carte / le déplacement sur la carte - Nessper - 27-06-2007

ben c'est normal qu'il ne soit plus nul vu que tu lui met une requête...
il faut que tu fasses un $row=mysql_fetch_row($resultat);
et ensuite tu testes $row.
parce que là tu fais ta requête mais tu n'en sors rien


RE: Apres la carte / le déplacement sur la carte - Roworll - 27-06-2007

Normal.
Mysql_Query renvoie toujours un recordset, même si ce dernier est vide.
Il te faut tester non pas l'existence du recordset mais le contenu de ce dernier.
Code PHP :
<?php 
$resultat
= NULL;
$resultat = mysql_query("SELECT 1 FROM profil_joueurs WHERE coord_x=='$x' and coord_y=='$y'");
//Dans ce cas, SELECT 1 est mieux que SELECT *.
//Inutile de surcharger MySQL en ramenant tout l'enregistrement pour un simple test d'existence.
if ($rs=mysql_fetch_row($resultat)) {
//On a réussi à affecter le contenu du recordset. Il a renvoyé quelque chose, la case est donc occupée
return False;
} else {
// Pas de contenu dans le recordset : case vide, déplacement Ok
return True;
}
Autre option, tu peux utiliser mysql_num_rows pour savoir si il y a des lignes dans ton recordset.


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

Sinon la,j'essayais la méthode de cacher les "radio" non nécessaire :

Code PHP :
<?php 
$resultat
= mysql_query("SELECT * FROM profil_joueurs WHERE (coord_x BETWEEN '$coord_x -1' AND '$coord_x +1') AND (coord_y BETWEEN '$coord_y -1' AND '$coord_y +1') ORDER BY coord_y DESC, coord_x");
$persos = mysql_fetch_array($resultat);


<
td align=\"center\"><input type=\"".test_place($persos, -1, +1, $coord_x, $coord_y)."\" name=\"bouger\" value=\"N_O\" /></td>

La fonction :

Code PHP :
<?php 
function test_place($persos, $x_add, $y_add, $x, $y)
{
if (
is_array($persos) && ($persos['coord_x']+$x_add == $x) && ($persos['coord_y']+$y_add == $y))
return
hidden;
else
return
radio;
}

Mais la a ma grande surprise a la place de la radio, j'ai un champ avec la valeur N_O a la place -_-'

Notice: Use of undefined constant radio - assumed 'radio'


RE: Apres la carte / le déplacement sur la carte - Roworll - 27-06-2007

Cacher les Radio est un mauvais choix car il peut poser ds problèmes de synchronisations.
Un joueur A veut se déplacer, il n'a personne autour de lui -> affichage des 8 radios buttons
Pendant qu'il réfléchit à son déplacement, un joueur B vient se placer à coté de lui.

Résultat, les options de déplacment que tu proposes ne sont pas corrects car ils sont désynchronisés par rapport aux valeurs réelles.

C'est la règle d'or des applications asynchrones : toujours vérifier si ce que l'on veut faire possible au moment ou on tente de le faire. Pas avant.

Et pour ton problème de N_O à la place d'un radio button, ta fonction test_place devrait plutot renvoyer une chaîne de caractère.
Essaye de return "radio" et return "hidden" à la place de return radio et return hidden.


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

Oui, c'est pas faux ça, j'y avais pas pensé :/
Je vais revenir sur la première idée donc.


RE: Apres la carte / le déplacement sur la carte - V1nc3 - 27-06-2007

Le résultat :

Code dans la page :
Code PHP :
<?php 
case 'N_O':
$coord_x = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_x'];
$coord_y = $_SESSION['perso_'.$_SESSION['perso'].'']['coord_y'];
if (
test_place($coord_x, $coord_y, -1, +1))
{
$_SESSION['perso_'.$_SESSION['perso'].'']['coord_x'] = $coord_x-1;
$_SESSION['perso_'.$_SESSION['perso'].'']['coord_y'] = $coord_y+1;
mysql_query("UPDATE profil_joueurs SET coord_x = '$coord_x', coord_y = '$coord_y' WHERE pseudo = '$pseudo' ");
}

Code de la fonction :

Code PHP :
<?php 
function test_place($x, $y, $x_add, $y_add)
{
$x = $x + $x_add;
$y = $y + $y_add;
$resultat = NULL;
$resultat = mysql_query("SELECT 1 FROM profil_joueurs WHERE coord_x=='$x' and coord_y=='$y'");
if (
$rs = mysql_fetch_row($resultat))
{
return
FALSE;
}
else
{
return
TRUE;
}
}

Quand je me déplace sur une case vide, pas de probs, mais j'arrive a me déplacer aussi sur les cases occupées, mais j'ai un message d'erreur :

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource