JeuWeb - Crée ton jeu par navigateur

Version complète : Créer une map
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Pages : 1 2
Bonsoir,

Je débute le PHP et je voudrais créer une map pour un jeu par navigateur seulement j'ai quelques problème ...
Le jeu est du même style que worldofshinobi.eu ou encore travian ...
Donc une map avec des icon de village ayant un liens vers le profil du joueur ...

<?php
include "config.php";
// ON PASSE A LA MAP !!
?>
<html>
<head>
<title>MAP</title>
<link rel="stylesheet" href="default/jeu.css" />
</head>
<body>
<?php
// Le village du joueur
$requeteME = mysql_query('SELECT posx,posy,skin FROM users WHERE id = '.$_SESSION['userid'].'');
$downME = mysql_fetch_array($requeteME);
$posXme = array_search('posx', $downME);
$posYme = array_key_exists('posy', $downME);
echo 'Type Village:'.$_SESSION['village'].'</br>X :'.$downME[$posXme].'</br>Y:'.$downME[$posYme].'';
?>
</br>
<div id="village">
<div id="text">
<?php
// AUTRE VILLAGE
$requeteALL = mysql_query('SELECT village,posx,posy,skin FROM users WHERE id != '.$_SESSION['userid'].'');
$downALL = mysql_fetch_array($requeteALL);
$posXall = array_search('posx', $downALL);
$posYall = array_key_exists('posy', $downALL);
?>
</div>
<a href="profile.php?id=<?php echo $_SESSION['userid'];?>"><img src="default/images/Jeu/icon<?php echo $_SESSION['skin']; ?>.png" style="position:absolute;top:<?php echo $downME[$posYme];?>;left:<?php echo $downME[$posXme];?>"/></a>
<?php
for ($i= 1; $i <= count($downALL['village']) ; $i++)
{
?>
<a href="profile.php?id=<?php echo $_SESSION['userid'];?>"><img src="default/images/Jeu/icon<?php echo $downALL['skin']; ?>.png" style="position:absolute;top:<?php echo $downALL[$posYall];?>;left:<?php echo $downALL[$posXall];?>"/></a>
<?php
}
?>
<?php
echo $_SESSION['village']; // MON VILLAGE
echo $downALL['village']; // LES AUTRE VILAGE
?>
</div>
</body>
</html>
Le hic c'est que le résultat ... hum, n'est pas ce que je voudrais avoir.
J'ai 3 joueur inscrit dessus et je ne vois que 2 village et non 3 ...

Auriez vous une idées ?

Cordialement et merci avant tout Wink

Redoine !
impossible de te repondre on ne connait pas la structure de ta base de donnée...et même si l'on avait la structure de ta base de donnée tu ne prend pas le problème dans le bon sens il me semble...

peut être devrais tu songer à séparer la récupération des données et ton affichage des données, je tente une explication:

dans un premier temps tu récupère tes données (mysql) que tu traites pour obtenir un array() ou un objset JSON ou autre, par exemple ton but doit etre d'obtenir un truc du genre:

$cases=array(
[0] => array ('x'=> 1 , 'y' => 12 , 'type_terrain' => 'sable' , 'id_joueur' => 32 , 'pseudo'=> 'Bob' )
[1] => array ('x'=> 2 , 'y' => 12 , 'type_terrain' => 'marais' , 'id_joueur' => 3 , 'pseudo'=> 'arthur' )
[2] => array ('x'=> 3 , 'y' => 12 , 'type_terrain' => 'terre' , 'id_joueur' => 135 , 'pseudo'=> 'John' )
);


une fois tes données modélisées dans un array (ou objet json) tu peut facilement les afficher en HTML/CSS genre:

foreach($cases as $data)
{
// j'affiche
}


ce n'est qu'un exemple stupide, mais mélanger ainsi ton code php et ton code html est absolument horrible

d'autre que moi te donnerons certainement un avis plus éclairé Wink
Hum je vais refaire un brouillons et vous tenir au courant de ce qu'il se passe sur ce je vous remercie Wink
Citation :for ($i= 1; $i <= count($downALL['village']) ; $i++)

tu as essayé avec $i=0 ? J'ai rapidement testé chez moi, et ça fonctionne...
C'est à dire ?

<?php
include "config.php";
// ON PASSE A LA MAP !!
?>
<html>
<head>
<title>MAP</title>
<link rel="stylesheet" href="default/jeu.css" />
</head>
<body>
</br>
<div id="village">
<div id="text">
<?php
// AUTRE VILLAGE
$requeteALL = mysql_query('SELECT id,village,posx,posy,skin FROM users WHERE id != '.$_SESSION['userid'].'');
$downALL = mysql_fetch_array($requeteALL);
$posXall = $downALL['posx'];
$posYall = $downALL['posy'];
?>
</div>
<a href="profile.php?id=<?php echo $_SESSION['userid'];?>"><img src="default/images/Jeu/icon<?php echo $_SESSION['skin']; ?>.png" style="position:absolute;top:<?php echo $_SESSION['posY'];?>;left:<?php echo $_SESSION['posX'];?>"/></a>
<?php
for ($i= 0; $i < count($downALL['village']) ; $i++)
{
?>
<a href="profile.php?id=<?php echo $downALL['id'];?>"><img src="default/images/Jeu/icon<?php echo $downALL['skin']; ?>.png" style="position:absolute;top:<?php echo $downALL[$posYall];?>;left:<?php echo $downALL[$posXall];?>"/></a>
<?php
}
?>
</div>
</body>
</html>
C'est parreille ...
J'ai une base :
Jeu ayant une table users qui a plusieurs champs ...
Et j'ai 4 id, 4 inscrit je veux afficher les village des 4 id selon les caractèristique des champs
Exemple :
Champs 'skin' -> Feu
On affiche alors au coordonnée X et Y
Je soutiens php_addict sur le mélange html/php notamment dans ta boucle "for".
C'est inesthétique et selon la version php que tu utilisera cela te posera probléme, utilise un echo dans ta boucle pour afficher l'html ^^

Ensuite pour ton probléme, mysql_fetch_array ne traite qu'une ligne par "appel" donc dans ta boucle tu traite encore et toujours le même village.

Pour ton count($downALL['village']) , fais afficher sa valeur avant avec un echo mais à mon avis il ne te donnera que "1".

La solution serait de mettre à la fin de ta boucle : $downALL = mysql_fetch_array($requeteALL);
pour traiter une nouvelle ligne.
Et pour le nombre max dans ta boucle , je dirais de faire une requete SQL sur la table users en mettant count(*) dans le select.
(30-01-2011, 12:36 PM)Kurogane a écrit : [ -> ]Je soutiens php_addict sur le mélange html/php notamment dans ta boucle "for".
C'est inesthétique et selon la version php que tu utilisera cela te posera probléme, utilise un echo dans ta boucle pour afficher l'html ^^

Ensuite pour ton probléme, mysql_fetch_array ne traite qu'une ligne par "appel" donc dans ta boucle tu traite encore et toujours le même village.

Pour ton count($downALL['village']) , fais afficher sa valeur avant avec un echo mais à mon avis il ne te donnera que "1".

La solution serait de mettre à la fin de ta boucle : $downALL = mysql_fetch_array($requeteALL);
pour traiter une nouvelle ligne.
Et pour le nombre max dans ta boucle , je dirais de faire une requete SQL sur la table users en mettant count(*) dans le select.

Mais oui quelle ... Kurogane merci de m'avoir remémorer tout cela par contre sur le echo je ne savais pas ... je ferais comme tu le dit et merci encore il me reste encore 2, 3 petite erreur a traité et je vous fait part de mon bilan !

EDIT :
Notice: Undefined index: 186 in C:\XXX\XX\XXX\map.php on line 22

Notice: Undefined index: 32 in C:\XXX\XX\XXX\map.php on line 22

Notice: Undefined index: 230 in C:\XXX\XX\XXX\map.php on line 22

Notice: Undefined index: 182 in C:\XXX\XX\XXX\map.php on line 22

Je n'ai jamais vu ce genre d'erreur ...
pourtant c'est une erreur très courante, ce signifie que à la ligne 22, quand tu appelles $mon_tableau[186], il se trouve que ton tableau n'a pas de "case" 186.

le truc bizzare c'est que si map.php est le code que tu nous montres et qu'il est en version intégrale, alors la ligne 22 correspond à


Code :
<a href="profile.php?id=<?php echo $_SESSION['userid'];?>"><img src="default/images/Jeu/icon<?php echo $_SESSION['skin']; ?>.png" style="position:absolute;top:<?php echo $_SESSION['posY'];?>;left:<?php echo $_SESSION['posX'];?>"/></a>
et il n'y a pas d'appel à un tableau avec des clés numériques ou des variables.

mystère
en 22 non mais dans celle-ci oui:


<?php
for ($i= 0; $i < count($downALL['village']) ; $i++) {
?>
<a href="profile.php?id=<?php echo $downALL['id'];?>">
<img src="default/images/Jeu/icon<?php echo $downALL['skin']; ?>.png"
style="position:absolute;top:<?php echo $downALL[$posYall];?>;left:<?php echo $downALL[$posXall];?>"/>
</a>
<?php
}
?>
J'ai oublier de vous dire que je passe d'une boucle for à une while :

<?php
include "config.php";
// ON PASSE A LA MAP !!
?>
<html>
<head>
<title>MAP</title>
<link rel="stylesheet" href="default/jeu.css" />
</head>
<body>
</br>
<div id="village">
<div id="text"></div>
<a href="profile.php?id=<?php echo $_SESSION['userid'];?>"><img src="default/images/Jeu/icon<?php echo $_SESSION['skin']; ?>.png" style="position:absolute;top:<?php echo $_SESSION['posY'];?>;left:<?php echo $_SESSION['posX'];?>"/></a>
<?php
// AUTRE VILLAGE
$requeteALL = mysql_query('SELECT id,village,posx,posy,skin FROM users WHERE id != '.$_SESSION['userid'].'');
$downALL = mysql_fetch_array($requeteALL)
while ($downALL = mysql_fetch_array($requeteALL))
{
$posXall = $downALL['posx'];
$posYall = $downALL['posy'];
echo '<a href="profile.php?id='.$downALL['id'].'"><img src="default/images/Jeu/icon'.$downALL['skin'].'.png" style="position:absolute;top:'.$downALL[$posYall].';left:'.$downALL[$posXall].'"/></a>';
$downALL++;
$downALL = mysql_fetch_array($requeteALL);
}
?>
</div>
</body>
</html>
Pages : 1 2