18-07-2009, 03:34 PM
(Modification du message : 19-07-2009, 12:58 PM par Sephi-Chan.)
Bonjour tout le Monde,
Bon cela fait un bon moment qui je bidouille ou php, j'ai trouvé ce site et il m'a paru pas mal ! (h)
En passant sur le Wiki j'ai vu ce superbe tuto sur les Map hexagonales, je me suis dit que j'allais l'implanter dans mon jeu, helas, ce script ne marchait pas en dynamique, c'est a dire que l'on peut bouger sur une grande Map. Enfin fini le blabla, passons a la partie technique ( La est le problème >< ).
J'ai mis en place un système de déplacement par Get, mais quand je clique sur la case 10/2 par exemple, ça envoie le joueur n'importe ou ( surement une erreur de calcul de coordonnées ). De plus, a chaque déplacement, un joueur d'une autre personne placé en 8/5 dans la BDD se retrouve en une autre position sur la Map qui varie suivant les déplacement de notre joueur (Mais reste toujours en 8/5 dans la BDD).
Notez le $gx et $gy qui permettent de bouger sur la map sans décaler celle-ci, avec les x, sa calculait avec $x * largeur, alors que maintenant j'ai mis un $gx et $gy qui permettent de générer une carte (avec $gx =1 et $gy =1) qui reste fixe sur l'écran même lors de déplacements .
J'ai modifié le code a ma façon et voila ce que cela donne :
Bon cela fait un bon moment qui je bidouille ou php, j'ai trouvé ce site et il m'a paru pas mal ! (h)
En passant sur le Wiki j'ai vu ce superbe tuto sur les Map hexagonales, je me suis dit que j'allais l'implanter dans mon jeu, helas, ce script ne marchait pas en dynamique, c'est a dire que l'on peut bouger sur une grande Map. Enfin fini le blabla, passons a la partie technique ( La est le problème >< ).
J'ai mis en place un système de déplacement par Get, mais quand je clique sur la case 10/2 par exemple, ça envoie le joueur n'importe ou ( surement une erreur de calcul de coordonnées ). De plus, a chaque déplacement, un joueur d'une autre personne placé en 8/5 dans la BDD se retrouve en une autre position sur la Map qui varie suivant les déplacement de notre joueur (Mais reste toujours en 8/5 dans la BDD).
Notez le $gx et $gy qui permettent de bouger sur la map sans décaler celle-ci, avec les x, sa calculait avec $x * largeur, alors que maintenant j'ai mis un $gx et $gy qui permettent de générer une carte (avec $gx =1 et $gy =1) qui reste fixe sur l'écran même lors de déplacements .
J'ai modifié le code a ma façon et voila ce que cela donne :
Code PHP :
<?php
$gx=1;
$gy=1;
mysql_connect('localhost','root',''); // Connection BDD
mysql_select_db('gyldorz');// Select base
$idperso=1;
if (isset($_GET['x']) AND isset($_GET['y'])) // on recupère les coordonées de l'url ( si il y en a )
{
$_GET['x'] = addslashes($_GET['x']);
$_GET['y'] = addslashes($_GET['y']);
echo $_GET['x'];
echo $_GET['y'];
mysql_query("UPDATE perso_info set x='".$_GET['x']."',y='".$_GET['y']."' where idperso='1'"); // on update la position
}
$sql = mysql_query("SELECT * FROM perso_info WHERE idperso='1'"); //Récupération des données du personnage
$perso = mysql_fetch_assoc($sql);
$sql = mysql_query("SELECT * FROM carte WHERE x='".$perso['x']."' AND y='".$perso['y']."'"); //Récupération des données du terrain
$terrain = mysql_fetch_assoc($sql);
//calcul de la vision
$x_min = $perso['x']-4;
$x_max = $perso['x']+4;
$y_min = $perso['y']-4;
$y_max= $perso['y']+4;
// On récupère les joueurs
$result = mysql_query("SELECT * FROM perso_info WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max'") or die(mysql_error());
// Stockage dans un array
while ( $data = mysql_fetch_assoc($result)) {
$joueur[$data['x']][$data['y']] = array('x'=>$data['x'],'y'=>$data['y'],'idperso'=>$data['idperso']);
// echo "$joueur[$data['x']][$data['y']]";
}
$width=45; // Largeur des hexa
$curent_y = -5000;
// Petit calcul pour ne pas déformer la map selon le y de base/référence lors de la génération
if ($y_min%2 == 0) {
$y =$y_min;
}else { $y =$y_min; } //Cette partie, j'ai pas compris et j'ai modifié donc je suis vraiment pas sur
$query = mysql_query("SELECT * FROM carte WHERE x BETWEEN '$x_min' AND '$x_max' AND y BETWEEN '$y_min' AND '$y_max' ORDER BY y,x");
//echo "<br />";
// On génére la map
$var_carte = "";
while($carte = mysql_fetch_assoc($query)) {
if ($curent_y!=$carte['y']) { // Nouvelle ligne
$x=0+$x_min;
$y++;
$gy=$gy+1;
$curent_y = $carte['y'];
$cx = $carte['x'];
$cy = $carte['y'];
$gx=1;
}
$gx=$gx+1;
$x++;
// Calcul pour savoir si on décale ou pas les cases d'une ligne
if ( ($y%2) == 1) { // Pair
$iX=($gx*45)-40;
}else {
$iX= ($gx*45) + ($width/2)-40;
}
$iY = ($gy*35)-45;
$kart = "";
$kart .= 'hex';
$kart .= $carte['idterrain'];
$var_carte .= '<div onClick="document.location.href=\'carte.php?x='.$x.'&y='.$y.'\'" id="'.$kart.'" class="case" style="top:'.$iY.'px;left:'.$iX.'px;">';
// <!-- POUR LE DEBUGGAGE AFFICHAGE DES x/y DANS LES CASES
$var_carte .= "<br />$x/$y";
// FIN DEBUGGAGE -->
if ( isset($joueur[$carte['x']][$carte['y']]))
{
$var_carte .= '<img src="perso/av.png" alt="Index" onmouseover=""/>';
}
$var_carte .= '</div>';
echo $joueur[$carte['x']][$carte['y']] ;
} // fin du While
echo $var_carte;
?>
Voila, petite question aussi, pour le nom de mon jeu, j'hésite entre Gylderz et Gyldorz, pouvez vous me conseiller ?
Merci
AleskWeb
Ps: Vous pouvez vous inspirer du système de mon script pour les interéssés