Andjety
Messages postés9Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention29 septembre 2006
-
27 sept. 2006 à 14:50
Andjety
Messages postés9Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention29 septembre 2006
-
29 sept. 2006 à 22:00
Bonjour,
on m'a bien aidé la dernière fois alors je reviens vers vous pour mon projet de jeu de bataille (échiquier en quelque sorte) et mes difficultés à afficher ce que je veux au bon endroit
voici le code où j'étais arrivé grace à un coup de main ici même
<?php
//connexion base de données
require "inc_connect.php";
// requête SQL pour sélectionner battle_unit
$sql = 'SELECT id_unit,name_unit,x_unit,y_unit,type_unit,nation FROM battle_units';
// envoi la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
// boucle pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on crée le tableau des coordonnées des unités
$tableau[$data['id_unit']] = $data['x_unit'] . ',' . $data['y_unit'] ;
// extraction des données
extract($data);
}
mon souci vient je pense de la partie en gras et de la fonction in_array qui était pourtant ma solution la dernière fois lol
le principe est donc d'afficher quelque chose dans une case si le x y de la case correspond au x y d'une unité du jeu
avec in_array ce but là est atteint
mais le hic c'est que je voudrais afficher un truc qui correspond bien à l'unité qui occupe la case, or là ça affcihe uniquement les valeurs de la dernière unité trouvée dans la table
franco_se
Messages postés151Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 juillet 20182 29 sept. 2006 à 13:41
personnellement, pour ce genre d'affichage, j'utilise une infobulle généré par overlib ( presentation FR ICI ). cette librerie permet l'affichage d'une infobulle au passage de la souris, ou en cliquant sur un lien, et autorise ol'utilisation de html ds la bulle.
j'ai aussi travaillé sur un jeu, ou il fallait explorer des lieux ( a la facon d'Amerzone ou Myst) et j'utilisé la bulle pour afficher les infos, et proposer des actions, en cliquant simplement sur un objet.
Andjety
Messages postés9Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention29 septembre 2006 27 sept. 2006 à 17:26
ok j'avais pas saisi la dernière fois milles excuses, je crois avoir (enfin) compris
en fait mon code pour pas être trop long était partiel et je comprends donc qu'il manque des variables en plus de $id
en effet ce que je veux afficher ce sont des infos figurant dans d'autres champs de la même table, en bref :
j'ai dans cette table : id_unit, name_unit, x_unit, y_unit, type_unit, nation
j'ai besoin de ceux en gras pour les afficher, puisque mon image de pièces est
et dans un calque voisin, je voudrai afficher l'image mais aussi $name_unit
bref si cette fois j'ai bien compris, il faudrait que je modifie $tableau ?
ainsi : $tableau[$data['id_unit']] = $data['x_unit'] . ',' . $data['y_unit']. ',' . $data['name_unit']. ',' . $data['type_unit']. ',' . $data['nation'] ;
j'ai bon ?
et après je mets derrière mon if :
$name_unit = array_search(
$x.",".$y, $tableau);
$type_unit =
array_search(
$x.",".$y, $tableau);
$nation =
array_search(
$x.",".$y, $tableau);
hum je sens que là j'ai pas bon ?
merci en tout cas encore une fois (c'est dingue comment un truc qui semblait simple à la conception s'avère plus compliqué que le reste)
(si, tu a les keys "x" et "y", elles le serviront pas ds ce code, ms on sais jamais, peut etre ds une autre version, elles serait utiles )
Ainsi, pour connaitre la variable ' name' de la piece d'id=5, tu fais $tableau['5']['name']. C'est comme ça que seront appellées les variables dans la partie if (in_array($x.",".$y, $tableau)){ ...... }
tu ecris donc :
// on verifie l'existance d'une piece a ces coordonées:
if (in_array($x.",".$y, $tableau)){
// on cherche l'id de la piece sur ces coordonnées:
$id_piece = array_search($x.",".$y, $tableau);
//affichage de sa coordonnée X
echo "Coordonnée X = " . $tableau[$id_piece]['x'] . "
";
//affichage de sa coordonnée Y
echo "Coordonnée Y = " . $tableau[$id_piece]['y']. "
";
//affichage de son nom
echo "nom = " . $tableau[$id_piece]['name']. "
";
//affichage de son type
echo "Type = " . $tableau[$id_piece]['type']. "
";
//affichage de la nation
echo "Nation= " . $tableau[$id_piece]['nation']. "
";
}
en prioncipe ça marche
Vous n’avez pas trouvé la réponse que vous recherchez ?
Andjety
Messages postés9Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention29 septembre 2006 28 sept. 2006 à 13:31
ok si je saisis (enfin je crois), l'idée n'est pas de récupérer une table de la bdd sous forme de tableau directement, mais de créer un autre tableau en récupérant les données ?
bref ça ne fonctionne plus, c'est à dire que avant il détectait bien une pièce présente aux bonnes coordonnées mais là avec le code que tu me proposes il ne détecte plus ces pièces
j'ai regarde le code source html généré et il traduit bien la création du tableau mais rien au sujet des données/variables récupérées ou créees...
je pense que le souci est là ?
$tableau[$data['id_unit']] = array(
"coordonnées" => $data['x_unit'] . ',' . $data['y_unit'] ,
"x" =>$data['x_unit'] ,
"y" => $data['y_unit'],
"name" => $data['name_unit'],
"type" => $data['type_unit'],
"nation" => $data['nation'] ) ;
franco_se
Messages postés151Date d'inscriptionsamedi 1 novembre 2003StatutMembreDernière intervention30 juillet 20182 29 sept. 2006 à 01:30
salut
oui, je viens de me rendre comte que je me suis trompé.
essaye avec ce code.
il y a 2 tableaux générés, regrouppand en fait les 2 methodes: un tableau $tableau_coordonnées qui contient les coordonnées de toutes les piecs, et un $tableau qui contion toutes les données des pieces. le code teste les coordonnées, verifie l'existance d'une piece a ces coordonnées, et recupere ces données.
<?php
//connexion base de données
require "inc_connect.php";
// requête SQL pour sélectionner battle_unit
$sql = 'SELECT id_unit, name_unit, x_unit, y_unit, type_unit, nation FROM battle_units';
// envoi la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
// boucle pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on crée le tableau des coordonnées des unités
$tableau_coordonnées[$data['id_unit']] = $data['x_unit'] . ',' . $data['y_unit'] ;
$tableau[] = array( "x" =>$data['x_unit'] , "y" => $data['y_unit'], "name" => $data['name_unit'], "type" => $data['type_unit'], "nation" => $data['nation'] ) ;
comme on peut le voir sur la page test, le script a semble t'il zappé id_unit= 1 pour passer à
2 direct pour le contenu mais en l'affichant dans la case de id_unit=1
et du coup dans la case 1/9 il ne sait pas quoi afficher
si j'ai bien suivi il prend donc bien id_unit=1 pour savoir que en 1/5 il y a quelque chose à affciher
mais ensuite il saute id_unit pour passer à 2 pour ce qu'il y a à afficher
donc quand on déclare $tableau[] cad le deuxième contenant les données, il commence à la deuxième ligne de la table
sauf que je vois pas pourquoi ???
voici le code exact de la page générée à l'url ci-dessus (au cas où)
<?php
//connexion base de données
require "inc_connect.php";
// requête SQL pour sélectionner battle_unit
$sql = 'SELECT id_unit,name_unit,x_unit,y_unit,type_unit,nation FROM battle_units';
// envoi la requête
$req = mysql_query($sql) or die('Erreur SQL !
'.$sql.'
'.mysql_error());
// boucle pour chaque enregistrement
while($data = mysql_fetch_assoc($req))
{
// on crée le tableau des coordonnées des unités
$tableau_coordonnées[$data['id_unit']] = $data['x_unit'] . ',' . $data['y_unit'] ;
$tableau[] = array( "x" =>$data['x_unit'] , "y" => $data['y_unit'], "name" => $data['name_unit'], "type" => $data['type_unit'], "nation" => $data['nation'] ) ;
}
// ferme la connexion à mysql
mysql_close();
echo '
',"\n";
echo '',\"\n\";
echo '----
',\"\n\";
echo ' |',\"\n\";
for($y =1;$y<= 12;$y++)
{
echo ' '.$y.' |',\"\n\";
}
echo '',\"\n\";
for($x =1;$x<= 12;$x++)
{
echo '----
',\"\n\";
echo ' '.$x.' |',\"\n\";
for($y =1;$y<=12;$y++)
{
echo '';
// on verifie l'existance d'une piece a ces coordonées:
if (in_array($x.",".$y, $tableau_coordonnées))
{
// on cherche l'id de la piece sur ces coordonnées:
$id_piece = array_search($x.",".$y, $tableau_coordonnées);
//affichage de sa coordonnée X
echo "Coordonnée X = " . $tableau[$id_piece]['x'] . "
";
//affichage de sa coordonnée Y
echo "Coordonnée Y = " . $tableau[$id_piece]['y']. "
";
//affichage de son nom
echo "nom = " . $tableau[$id_piece]['name']. "
";
//affichage de son type
echo "Type = " . $tableau[$id_piece]['type']. "
";
Andjety
Messages postés9Date d'inscriptionvendredi 15 septembre 2006StatutMembreDernière intervention29 septembre 2006 29 sept. 2006 à 13:14
c'était bien ça merci ;-)
j'ai une nouvelle galère quand je veux rendre ça plus graphique et passée à l'étape suivante, bouger les pièces...
je voulais que à droite de mon tableau où s'affiche les pièces, je puisse afficher deux calques, l'un pour "décrire l'unité" ciblée et l'autre pour proposer l'interface pour bouger "l'unité ciblée"
j'ai tenter le coup avec du javascript onmouseover, onmouseclick, etc.