J'affiche une portion de carte. Cette carte contient 2500 cellules (50 x 50), chacune inscrite dans une table nommée Parcelle.
Chaque joueur possède une cellule et son nom est dans cette table.
J'affiche juste une portion de cette carte de 7x7.
Chaque cellule fait 32px.
Grace à une boucle, je parcours la table et suivant la valeur de "objet", j'affiche une icone à la position correspondante.
L'ennui c'est que je fais 49 requêtes (7x7). je pense que la bonne méthode serait plutôt de lire la table une fois,et mémoriser le tout dans un array .
Voici mon code avec commentaire, un peu archaique mais j'ai touvé ça tout seul
$id = $_SESSION['id'];
// obtenir id du joueur
$sql = "SELECT id FROM parcelle WHERE id_proprio = '$id' AND objet='1'";
$req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
$data = mysql_fetch_array($req);
$id_ville = $data['id']; // id village
//empêcher de dépasser les extremes
//le 24 et 48 est pour afficher l'objet du joueur au centre de la carte
$limite_inf = $id_ville - 24; if($limite_inf <= 0){$limite_inf = 1;}
$limite_sup = $limite_inf + 48;if($limite_sup > 2500){$limite_sup = 2502;}
// afficher la portion de carte
echo '<div id="carte">';
$x = 0;
$y = 0;
$cp = 0;
for ($i=$limite_inf;$i<=$limite_sup;$i++){
$sql = "SELECT objet,nom_proprio FROM parcelle WHERE id='$i'";
$req=mysql_query($sql);
$data = mysql_fetch_array($req);
$chef = $data['nom_proprio'];
// afficher l'icone suivant valeur de objet, je prend ici que le premier cas : 1
if ($data['objet'] == 1 ){
echo '<span style="position: absolute; width: 32px; height: 32px;left: ',$x,'px; top:',$y,'px;"title="',$chef,'">';
echo '<img class="s_bord" src="deco_2/village.png">';
echo '</span>';
}
$x = $x + 32; //décalage de 32 px car icone = 32x32px
$cp =$cp + 1;
// si bout de ligne gauche atteint, on décale de 32px vers le bas pour changer de ligne donc $y auguement de 32 px, et $x repart à 0 (bord droit)
if ($cp == 7) {$cp = 0; $y = $y + 32; $x = 0;}
}
Il est possible que je n'utilise pas la bonne méthode. Surtout avec ces 49 requêtes.L'idée de l'array est-elle bonne ou suis-je carrément à côté de la plaque ?