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

Pages : 1 2 3


Affichage map - syslog - 03-08-2010

Bonjour à tous!
Je suis actuellement sur un simple affichage d'une pseudo map. C'est de la vue classique avec des cases en forme carrée.

J'ai repris un code fournit dans le wiki en le modifiant à ma sauce. Actuellement rien ne s'affiche, page blanche, le code source m'a l'air correct.
Voici ma source: http://wiki.jeuweb.org/tutoprog/carte_hexagonale

Voici mon code, j'ai mit quelques commentaires supplémentaire aux endroits où j'ai un peu de mal:

Code PHP :
<?php
$bdd
= new PDO('mysql:host=localhost;dbname=jeuphp1', 'user_jeuphp', 'password');

$sql = $bdd->query("SELECT * FROM perso WHERE id_perso='2'"); //Récupération des données du personnage
$perso = $sql->fetch(PDO::FETCH_ASSOC);
$sql = $bdd->query("SELECT * FROM carte,terrain WHERE x='".$perso['x']."' AND y='".$perso['y']."'"); //Récupération des données du terrain
$terrain = $sql->fetch(PDO::FETCH_ASSOC);

// On définit le tableau en fonction de la vision
$x_min = $perso['x']-$terrain['vision'];
$x_max = $perso['x']+$terrain['vision'];
$y_min = $perso['y']-$terrain['vision'];
$y_max= $perso['y']+$terrain['vision'];


// On récupère les données 'joueurs' des environs
$result = $bdd->query("SELECT * FROM perso WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max'") or die(mysql_error());

$var_carte=""; // rajouté sinon la variable est signalé comme indéfinie!!!

// On va stocker les infos de chaque joueur dans un array
while ( $data = $result->fetch(PDO::FETCH_ASSOC)) {
$joueur[$data['x']][$data['y']] = array('x'=>$data['x'],'y'=>$data['y'],'id_perso'=>$data['id_perso']);
}



$width=30; // Largeur de l'image des terrains qui permettra de décaler les images
$curent_y = -5000; // je comprends pas bien l'intérêt de ces deux lignes


$query = $bdd->query("SELECT * FROM carte,terrain WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max' ORDER BY y,x");


// On génére la map
while($carte = $query->fetch(PDO::FETCH_ASSOC)) {
if (
$curent_y!=$carte['y']) { // Nouvelle ligne
$x=0;
$y++;
$curent_y = $carte['y'];
}
$x++;



$var_carte .= '<div class="case" style="top:30px;left:30px;';
$var_carte .= 'background-image: url(\'images/'.$carte['ref_terrain'].'.png\');">';


$var_carte .= '</div>';

}
// fin While

echo $var_carte;




echo
$perso['ref_perso']; // test bidon
$sql->closeCursor();
?>

Les endroits pas très clair pour moi sont :
Code PHP :
<?php 
$width
=30; // Largeur de l'image des terrains qui permettra de décaler les images
$curent_y = -5000; // je comprends pas bien l'intérêt de ces deux lignes

Code PHP :
<?php 
while($carte = $query->fetch(PDO::FETCH_ASSOC)) {
if (
$curent_y!=$carte['y']) { // Nouvelle ligne
$x=0;
$y++;
$curent_y = $carte['y'];
}
$x++;

J'ai essayé plusieurs versions du 'background-image: url(\'images/'.$carte['ref_terrain'].'.png, mes images se trouvent bien dans un dossier images situé à la racine de la page php et le lien vers les images est bon (j'ai testé avec un simple <img>).

Merci d'avance pour vos éclaircissements.


RE: Affichage map - Sh4rk - 03-08-2010

Bon il s'agit déjà de cerné où se trouve ton problème

Je te conseille de faire des tests ligne par ligne en mettant:
echo "ok";
exit();

Tu le mets après ta première ligne, si tu le vois, tu l'enlève et le mets à la suivante et cela jusqu'a ce que tu ne le voye plus et alors ton erreur sera à la ligne du dessus généralement

Sinon je pense que tu as déjà des erreurs :

Code PHP :
<?php 
// On récupère les données 'joueurs' des environs
$result = $bdd->query("SELECT * FROM perso WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max'") or die(mysql_error());

à remplacer par :

Code PHP :
<?php 
// On récupère les données 'joueurs' des environs
$result = $bdd->query("SELECT * FROM perso WHERE x BETWEEN ".$x_min." AND ".$x_max." AND y BETWEEN ".$y_min." AND ".$y_max."") or die(mysql_error());

Et problème à:
Code PHP :
<?php 
// je comprends pas bien l'intérêt de ces deux lignes


$query = $bdd->query("SELECT * FROM carte,terrain WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max' ORDER BY y,x");

à remplacer par:
Code PHP :
<?php 
// je comprends pas bien l'intérêt de ces deux lignes


$query = $bdd->query("SELECT * FROM carte,terrain WHERE x BETWEEN ".$x_min." AND ".$x_max." AND y BETWEEN ".$y_min." AND ".$y_max." ORDER BY y,x");



RE: Affichage map - syslog - 03-08-2010

Il y a peut-être un souci de concaténation effectivement mais pour le moment je pense pas que ça soit ça l'erreur d'affichage (je peux me tromper):
Quand je lance la page, page blanche et le code source donne :
<div class="case" style="top:30px;left:30px;background-image: url('images/rouge.png');"></div>
(ceci de nombreuse fois) donc ce qui me pose soucis actuellement est l'affichage de la div.

(Je viens de modifier ça ne change rien Smile ).


RE: Affichage map - Sh4rk - 03-08-2010

Ben fais ce que je t'ai dis pour detecter ou se trouve l'erreur mais tu devais en avoir dans les requetes


RE: Affichage map - NicoMSEvent - 04-08-2010

je n'ai pas vu d'erreur flagrante dans ton code.

le seul problème est au niveau de l'affichage :
ton div est vide... -> largeur et hauteur = 0px (change le via css)

A mon avis, tes soucis viennent de là Wink


RE: Affichage map - christouphe - 04-08-2010

hum note personnelle, ça me fait marrer de voir ceci:

Code PHP :
<?php 
or die(mysql_error())

alors que tu bosses sous PDO....

SOIT tu utilises PDO correctement avec soin système d'exception => TRY...CATCH

SOIT tu bosses avec mysqli_*


MAIS ne mélange pas les deux.


RE: Affichage map - niahoo - 04-08-2010

non mais même avec php_mysql ya moyen de gérer les erreurs autrement que en terminant le script comme un bourrin


RE: Affichage map - christouphe - 04-08-2010

je n'ai pas dit de terminer le script comme un bourrin, mais d'ailleurs, utiliser le try catch ne bloque pas le script, alors que exit() (ou die() ) si. Ou alors j'ai pas compris ton intervention Wink


RE: Affichage map - Sh4rk - 04-08-2010

Bon pour revenir au problème je n avais pas fait attention en effet à ta div qui comme dis plus haut ne risque pas de t afficher quelque chose étant donné quelle ne contient rien
<div></div>
Donc tu as beau mettre une image en background ça ne risque pas d' afficher quelque chose
Don deux solution:
Tu enlevé ton background-image et tu met l image dans ta div
Ou bien tu laisse ainsi et tu met un width et un groggy correspondant a ton image dans le style de ta div
Et dans ta div tu mets juste &nbsp


RE: Affichage map - Anthor - 04-08-2010

@Christouphe: Ce que niahoo veux dire c'est que tu peux tout à fait utiliser un :

or throw new Exception(mysql_error());

Mais il n'en reste pas moins, qu'il est fortement déconseillé d'utiliser les fonctions mysql_