JeuWeb - Crée ton jeu par navigateur
Créer une map - 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 : Créer une map (/showthread.php?tid=5200)

Pages : 1 2


Créer une map - Redoine - 29-01-2011

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 !


RE: Créer une map - php_addict - 29-01-2011

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


RE: Créer une map - Redoine - 29-01-2011

Hum je vais refaire un brouillons et vous tenir au courant de ce qu'il se passe sur ce je vous remercie Wink


RE: Créer une map - Revan - 29-01-2011

Citation :for ($i= 1; $i <= count($downALL['village']) ; $i++)

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


RE: Créer une map - Redoine - 29-01-2011

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


RE: Créer une map - Kurogane - 30-01-2011

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.


RE: Créer une map - Redoine - 31-01-2011

(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 ...


RE: Créer une map - niahoo - 31-01-2011

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


RE: Créer une map - christouphe - 31-01-2011

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
}
?>



RE: Créer une map - Redoine - 31-01-2011

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>