JeuWeb - Crée ton jeu par navigateur
probleme pour ma map, que mettre dans l'organisation de ma requette ? - 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 pour ma map, que mettre dans l'organisation de ma requette ? (/showthread.php?tid=1802)

Pages : 1 2


probleme pour ma map, que mettre dans l'organisation de ma requette ? - leni - 25-09-2007

Salut tout le monde !

Encore une fois, j'ai un probleme avec ma map ...
voici mon idée : recuperer la position du joueur => recuperer els joueurs autour de lui ainsi que les obstacles, et enfin, combler les vides.

j'ai donc fait se bout de code :
Code PHP :
<?php 
$pseudo
= $_SESSION['pseudo'];

//on viens chercher la position du joueur
$requete = mysql_query("SELECT posx, posy FROM map WHERE `pseudo`='$pseudo'");
$sql = mysql_fetch_array ($requete);
$posx = $sql['posx'];
$posy = $sql['posy'];

if (
$posx <= -146)
{
$x_start = $posx-4
}
else
{
$x_start = -150;
}
if (
$posx >= 146)
{
$x_end = $posx+4
}
else
{
$x_end = 150;
}

if (
$posy <= -146)
{
$y_start = $posy-4
}
else
{
$y_start = -150;
}
if (
$posy >= 146)
{
$y_end = $posy+4
}
else
{
$y_end = 150;
}


$req = mysql_query("SELECT posx, posy FROM map WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());

$joueur=mysql_fetch_array($req);

$req2 = mysql_query("SELECT posx, posy FROM obstacles WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());
$oasis=mysql_fetch_array($req2);

?>
<table>
<tr>
<td>y\x</td>
<?php
echo '<td> '.$x_start.' <td>'; // debut
$x2 = $x_start+1;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;

echo
'<td>'.$x2.'</td>'; // ligne du qgau depart
$x2++;

echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>'; // x2 est eguale a end, alias la fin de la map

?>
</tr>
<tr>
<?php
$y2
=$y_end;
echo
'<td> '.$y2.' <td>'; // debut
$y2--;

echo
'<td>';
$x = $x_start;
$y = $y_end
if ($ ........

?>


Pas besoin d'un oeuil de linx pour remarquer que j'ai beuger, et que je ne sais absolument pas quoi mettre, et pas besoin non plus de s'apeler Sherlock Holmes pour en deduire que je suis un mauvais qui sait même pas pourquoi il a coder tout sa ...

voici mon probleme : si je met se que j'ai envie de mettre, sa donne sa :
Code PHP :
<?php 
if ($joueurs['posx'] == $x && $joueur['posy'] == $y) { echo '<td><img src="avatar du joueur" /> }
Mais le probleme, c'estq ue si il y a un joueur dont la position x est eguale à $x, mais que sa position y est differente de $y alors qu'un autre joueur a une une posx != $x et posy == $y, et bien il y aura marquer quelqu'un alorsq u'en fait, il n'y as personne ...

Je dirait que la source du probleme est le mysql_fetch_array ... il faudrait le templacer par queque chose, mais quoi ?
si je veu regler mon probleme, je peu aussi mettre une requete par case, mais bon, 9*9 = 81 plus les requete des autres truc de la page ferait genre 100 requettes au total, sur une seul page, le visiteur n'as pas interet à etre presser ...
j'ai aussi songer a un free-result, mais il y a un gros prebleme avec sa, c'est que l'image ou il n'y as rien est definie qu'une fois. Ors si il n'y as ni joueur ni obstacle, il y a "vide.php", et vide.php genère alatoirement une image. Donc si vide.php n'est generer qu'une seul et unique fois, il y aura peu etre de 80 fois la mm image, et c'est très très moche ^^

quelqu'un pourrai m'aider svp ? :wowowow:

bonne soirée Smile


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - Byleth - 25-09-2007

[quote=leni]

Code PHP :
<?php 
$req
= mysql_query("SELECT posx, posy FROM map WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());

$joueur=mysql_fetch_array($req);

$req2 = mysql_query("SELECT posx, posy FROM obstacles WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());
$oasis=mysql_fetch_array($req2);

A vu de nez (mais il est tard) je dirais qu'il faudrait mettre tes fetch_array dans une boucle pour tout extraire. Là tu ne fais qu'une ligne.

D'ailleurs, remplace par fetch_assoc, c'est mieux car moins gourmand et a le même résultat.

Code PHP :
<?php 
<table>
<
tr>
<
td>y\x</td>
<?
php
echo '<td> '.$x_start.' <td>'; // debut
$x2 = $x_start+1;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;

echo
'<td>'.$x2.'</td>'; // ligne du qgau depart
$x2++;

echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>';
$x2++;
echo
'<td>'.$x2.'</td>'; // x2 est eguale a end, alias la fin de la map

Et là, une boucle de type for (ou while, c'est selon ton code) ne serait pas la bienvenue?


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - leni - 26-09-2007

Byleth a écrit :
leni a écrit :
Code PHP :
<?php 
$req2
= mysql_query("SELECT posx, posy FROM obstacles WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());
$oasis=mysql_fetch_array($req2);

A vu de nez (mais il est tard) je dirais qu'il faudrait mettre tes fetch_array dans une boucle pour tout extraire. Là tu ne fais qu'une ligne.

le probleme de si je met une boucle, c'est que si il y as une case vide entre 2 joueurs, elle n'aparaitra pas sur la carte si ?[/php]


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - Loetheri - 26-09-2007

Pourquoi n'apparaiterait-elle ?


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - Byleth - 26-09-2007

Tu extrais dans un tableau et après tu utilises des FOR imbriqués pour tout afficher.
Là tu testes et si la case en question est vide (donc pas dans ton tableau) tu affiches une image aléatoire.

C'est pas plus compliqué que ça. Enfin, c'est la méthode de Carlou que j'ai reprise donc peut être as tu des idées plus neuves ^^


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - leni - 27-09-2007

bon alors, j'ai pris note, et j'ai fait se script :
Code PHP :
<?php 
//on viens chercher la position du joueur
$requete = mysql_query("SELECT posx, posy FROM map WHERE `pseudo`='Master'");
$sql = mysql_fetch_array ($requete);
$posx = $sql['posx'];
$posy = $sql['posy'];

if (
$posx <= -146)
{
$x_start = $posx-4;
}
else
{
$x_start = -150;
}
if (
$posx >= 146)
{
$x_end = $posx+4;
}
else
{
$x_end = 150;
}

if (
$posy <= -146)
{
$y_start = $posy-4;
}
else
{
$y_start = -150;
}
if (
$posy >= 146)
{
$y_end = $posy+4;
}
else
{
$y_end = 150;
}


$req = mysql_query("SELECT pseudo, posx, posy FROM map WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());

$joueur=mysql_fetch_array($req);

$req2 = mysql_query("SELECT posx, posy FROM obstacles WHERE posx between '.$x_start.' and '.$x_end.' AND posy between '.$y_start.' and '.$y_end.'") or die(mysql_error());
$oasis=mysql_fetch_array($req2);

?>
<table>
<tr>
<td>y\x</td>
<?php
$x2
= $x_start;
$x3 = $x2 + 9;
while (
$x2 < $x3)
{
echo
'<td>'.$x2.'</td>';
$x2++;
}

?>
</tr>
<tr>
<?php
$y2
=$y_end;
echo
'<td> '.$y2.' <td>'; // debut


echo '<td>';
$x = $x_start;
$y = $y_end;

for (
$case1 = 0; $case < 9; $case++) // on commence la première ligne, avec 9 cases
{
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
}

?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--; // on indique qu'on se trouve une ligne au dessous


$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // 2° ligne
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;


$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // 3° ligne
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}

?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;


$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // 4°
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;


$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // 5° comment sa mon code est repetitif ?
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;

$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) //6°
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;

$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // comment avez vous deviinez que c'est la 7° ligne ?
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;

$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++) // je vous avoue que je ne sais compter que jusuq'a 7, donc on va s'arreter la ^^
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;

echo
'</td>';
}
?>
</tr>
<tr>
<?php
echo '<td> '.$y2.' <td>'; // debut
$y2--;

$x = $x_start;
$y = $y2;

for (
$case1 = 0; $case < 9; $case++)
{
echo
'<td>';
if (
$joueur['posx'] == $x && $joueur['posy'] == $y)
{
echo
'<img src="image/qg.png" />';
}
elseif (
$oasis['posx'] == $x && $oasis['posy'] == $y)
{
echo
'<img src="image/oasis.png" />';
}
else
{
echo
'<img src="images/vide.php" />';
}
$x++;
echo
'</td>';

}
?>

le voici ig : www.crusades.fr/remap.php

et omme vous le voyez, il marche aps impec ...
aussi, le cdage s'effectue par lignes, donc sa aussi c'est bof, mais si je faut autrement, sa risque de durer une plombe nn ?


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - Loetheri - 27-09-2007

Brrr ... Déjà avant de pouvoir s'attaquer à ce genre de code, il faut ... des commentaires. Les commentaires servent à dire ce que tu veux faire dans le prochain bloc de code.
L'indentation ne ferait pas de mal non plus ;-)

Tu t'es peut-être trompé ... mais il y a 4 ou 5 fois le même morceau de code (à la fin). Pourquoi ? Est-ce ainsi dans ton code ? Dans ce fameux bout de code répétitif, tu oublies de fermer une balise <td>, ce qui provoque ton erreur.


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - leni - 28-09-2007

voila, j'ai editer le code, il y a toujours autant d'erreurs, mais il y a toujours autant d'erreurs...

j'ai rajouter des commentaires, je sa dois etre un peu plus agreable a lire maintenant Wink mais pas la peine derester des heures dessus, on peu s'arreter a la fin de la 2° ligne, après c tjr pareil ...

aussi, si quelqu'un peu me dire puruqoi c'est toujours la même image, je veu bien savoir Big Grin


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - Byleth - 28-09-2007

echo '<img src="images/vide.php" />';


>> ça marche ça?


RE: probleme pour ma map, que mettre dans l'organisation de ma requette ? - leni - 28-09-2007

oui ^^ c'est dailleur le seul truc qui mrache pur le moment ...
http://www.crusades.fr/remap.php