JeuWeb - Crée ton jeu par navigateur
Include, pour ma mappe[Regle, Merci a Raoull^^] - 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 : Include, pour ma mappe[Regle, Merci a Raoull^^] (/showthread.php?tid=118)

Pages : 1 2


Include, pour ma mappe[Regle, Merci a Raoull^^] - Kassak - 22-02-2007

Bon je post préfère poster ici^^il y a des réponses un peu plus rapidement...Smile

Bon, j'ai ma carte sur mon jeu, qui marche nickel.
J'ai voulu faire un point de changement de mappe. Si le joueur se trouve a la position X/Y, alors j'ai fais un include de la nouvelle carte, avec les nouvelles coordonnées, ainsi que l'enregistrement de la nouvelle position du joueur dans la BDD.
Lorsque je vais sur la case, mon joueur change de carte, je le vois bien sur l'autre, il est a la bonne position, ses infos ont été modifé dans la BDD. Tout va bien jusque la^^
Mais si je me déplace, ma page me rafiche la 1ere map, mon perso reste sur l'autre, et il continue de se deplacer sur l'autre, sans que je voye...

Donc j'ai diverses questions, comment faire pour que quand je me déplace ma page affiche la bonne carte??
Où mettre mon include, qui se présente tout cette forme Si X=tant et Y=tant, include carte2.php
sinon on reste sur la même carte.
Et que mettre dans mon include?? tout le code de la map?? Je ne sais pas...


Voici mon code :

Code PHP :
<?php 
<form action="carte.php" method="post">
<
div align="center">
<
br>
<
table width="120" border="0" cellspacing="0" cellpadding="0" align="center" height="120">
<
tbody>
<
tr>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="NO"></td>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="N"></td>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="NE"></td>
</
tr>
<
tr>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="O"></td>
<
td align="center" valign="middle" width="40" height="40"><img src="image/rosevent.jpg" alt="" height="40" width="40" align="absmiddle"></td>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="E"></td>
</
tr>
<
tr>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="SO"></td>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="S"></td>
<
td align="center" valign="middle" width="40" height="40"><input type="submit" name="DIR" value="SE"></td>
</
tr>
</
tbody>
</
table>
</
div>
</
form>

<?



mysql_connect();
mysql_select_db();


$pseudo_joueur = $_SESSION['pseudo'];



//on viens chercher la position du joueur
$requete = mysql_query("SELECT avatar_joueur, posx, posy, map_id FROM membre WHERE `pseudo`='$pseudo_joueur'");
$sql = mysql_fetch_array ($requete);
$posx = $sql['posx'];
$posy = $sql['posy'];
$avatar_joueur = $sql['avatar_joueur'];
$map_id = $sql['map_id'];


//Gestion des fleches de déplacement
if (isset($_POST['DIR']))
{
//définitions des directions
switch ($_POST['DIR']){
case
"NO":
$dirx = $posx-1;
$diry = $posy-1;
break;
case
"N":
$dirx = $posx;
$diry = $posy-1;
break;
case
"NE":
$dirx = $posx+1;
$diry = $posy-1;
break;
case
"SO":
$dirx = $posx-1;
$diry = $posy+1;
break;
case
"S":
$dirx = $posx;
$diry = $posy+1;
break;
case
"SE":
$dirx = $posx+1;
$diry = $posy+1;
break;
case
"E":
$dirx = $posx+1;
$diry = $posy;
break;
case
"O":
$dirx = $posx-1;
$diry = $posy;
break;
}


// Vérification de la présence des autres joueurs
$sq2 = mysql_query('SELECT pseudo, posx, posy FROM membre WHERE posx='.$dirx.' AND posy='.$diry.' ') or die(mysql_error());
while (
$data = mysql_fetch_array($sq2))
{
if (empty(
$TabMAPjoueur[$data['posx']][$data['posy']]))
$TabMAPjoueur[$data['posx']][$data['posy']] = $data['pseudo'];
}

mysql_free_result($sq2);

$sql = mysql_query('SELECT rien, posx, posy FROM inaccessible WHERE posx='.$dirx.' AND posy='.$diry.' ') or die(mysql_error());
while (
$data = mysql_fetch_array($sql))
{
if (empty(
$TabMAPrien[$data['posx']][$data['posy']]))
$TabMAPrien[$data['posx']][$data['posy']] = $data['rien'];
}

mysql_free_result($sql);

$sql = mysql_query('SELECT nom, posx, posy FROM PNJ WHERE posx='.$dirx.' AND posy='.$diry.' ') or die(mysql_error());
while (
$data = mysql_fetch_array($sql))
{
if (empty(
$TabMAPpnj[$data['posx']][$data['posy']]))
$TabMAPpnj[$data['posx']][$data['posy']] = $data['nom'];
}

mysql_free_result($sql);


if(!empty(
$TabMAPrien[$dirx][$diry]) or !empty($TabMAPjoueur[$dirx][$diry]) or !empty($TabMAPpnj[$dirx][$diry]) or $dirx==-1 or $diry==-1 or $dirx==19 or $diry==11)// si on detecte un autre joueur ou un batiment ou un bord de carte
{
echo
'<font color=#ff0000>Vous ne pouvez pas vous placer ici!!</font><br><br>'."\n";//on se deplace pas
}
else
{
//si c'est vide
//on change de direction
$posx = $dirx;
$posy = $diry;
//et on update sa position dans la table
mysql_query("UPDATE membre Set posx='$posx', posy='$posy' WHERE `pseudo`='$pseudo_joueur'") or die (mysql_error());
}
}



//Définition de la map
$x_debut=0 ;
$x_fin=18;
$y_debut=0;
$y_fin=10;


/*
Vérification de la présence des autres joueurs:
on va chercher les joueurs qui sont dans le perimetre défini precedement.
*/
$sq2 = 'SELECT avatar_joueur, posx, posy, map_id FROM membre WHERE posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC';
$req = mysql_query($sq2) or die(mysql_error());
while (
$data = mysql_fetch_array($req)) {
if (empty(
$TabMAPjoueur[$data['posx']][$data['posy']]))
$TabMAPjoueur[$data['posx']][$data['posy']] = $data['avatar_joueur'];
}
mysql_free_result($req);

$sq2 = 'SELECT nom, posx, posy FROM PNJ WHERE posx between '.$x_debut.' and '.$x_fin.' AND posy between '.$y_debut.' and '.$y_fin.' ORDER BY posx DESC,posy DESC';
$req = mysql_query($sq2) or die(mysql_error());
while (
$data = mysql_fetch_array($req)) {
if (empty(
$TabMAPpnj[$data['posx']][$data['posy']]))
$TabMAPpnj[$data['posx']][$data['posy']] = $data['nom'];
}
mysql_free_result($req);

$sql = mysql_query("SELECT posx, posy FROM membre WHERE `pseudo`='$pseudo_joueur'") or die(mysql_error());
$data = mysql_fetch_array($sql);


echo
'<table background="image/terrain.jpg" border="1" cellspacing="0" cellpadding="0">';
echo
'<tr><td align="center" valign="middle">I</td>';

//on affiche les positions x sur la premiere ligne
for($x=$x_debut;$x<=$x_fin;$x++) echo '<td align="center" valign="middle">'.$x.'</td>'."\n";

//on affiche lignes par lignes la position y, les autres joueurs et les batiments
for ($y=$y_debut;$y<=$y_fin;$y++)
{
echo
'<tr ><td align="center" valign="middle" >'.$y.'</td>'."\n";//affichage de la position

for($x=$x_debut;$x<=$x_fin;$x++) {// pour chaque lignes

if($x==$posx && $y==$posy)//si on est sur la position du joueur
echo '<td align="center" valign="middle"><img src=image/'.$avatar_joueur.'.gif></td>';//on affiche l'avatar de votre perso
else
if(!empty(
$TabMAPjoueur[$x][$y]))//si on tombe sur un autre joueur
echo '<td align="center" valign="middle" <img src=image/'.$TabMAPjoueur[$x][$y].'.gif></td>';//on affiche l'avatar du joueur
else
if(!empty(
$TabMAPpnj[$x][$y]))
echo
'<td align="center" valign="middle" <img src=image/'.$TabMAPpnj[$x][$y].'.gif></td>';
else
echo
'<td align="center" valign="middle"> </td>';
}
echo
'</tr>';//on ferme la ligne et on passe a la ligne suivate
}
echo
'</tbody></table>';//on ferme la table





for ($x=$posx-1;$x<=$posx+1;$x++)
{
// tous les x autour du joueur a case -1 et case +1
for ($y=$posy-1;$y<=$posy+1;$y++)
{
// tous les y autour du joueur a case -1 et case +1
$sq = mysql_query('SELECT pseudo FROM membre WHERE posx='.$x.' AND posy='.$y.' ORDER BY posx DESC,posy DESC') or die(mysql_error());
$data = mysql_fetch_array($sq);

if (!empty(
$data['pseudo']) and $data['pseudo'] != $_SESSION['pseudo'])// si on trouve un joueur et que ce n'est biensur pas vous
{
echo
'<form action="carte.php" method="post">joueur à attaquer:<br>';
echo
'<select name="attaque_joueur">';
echo
'<option value="'.$data['pseudo'].'">'.$data['pseudo'].'</option>'; //on l'affiche
echo '</select><input type="submit" name="attaque" value="Attaquer">'."\n";
echo
'</form>'."\n" ;
}

$sq = mysql_query('SELECT nom FROM PNJ WHERE posx='.$x.' AND posy='.$y.' ORDER BY posx DESC,posy DESC') or die(mysql_error());
$data = mysql_fetch_array($sq);

if (!empty(
$data['nom']))// si on trouve un joueur et que ce n'est biensur pas vous
{
echo
'<form action="carte.php" method="post">PNJ présent<br>';
echo
'<select name="attaque_joueur">';
echo
'<option value="'.$data['nom'].'">'.$data['nom'].'</option>'; //on l'affiche
echo '</select><input type="submit" name="attaque" value="Parler">'."\n";
echo
'</form>'."\n" ;
}


}
mysql_free_result($sq);

}



?>

Voili voilou, merci de m'aider^^


RE: Include, pour ma mappe - Raoull - 22-02-2007

J'ai pas trop regardé ton code, mais le plus simple pour ce que tu veux faire, c'est de sauver dans la bdd un champ pour chaque joueur, ou tu sauve le N° de la carte ou il est.

Tu récupère ce numéro, et tu peux l'exploiter par deivers moyens, suivant ton systeme d'affichage de la carte :

- si tu as 1 seule image de carte, tu fais comme pour tes avatar : <img src="'.$num_cart.'.jpg">

- si tu as un tableau, avec dans chaque case un fond correspondant à la carte, tu stoke toues les ilages pour chaque carte dans un dossier séparé, puis tu peux faire, pour chaqu ecase :

<td bakground="./'.$numcarte.'/'.$posx.'_'.$posy.'.jpg">

Bon voila, c 2 moyens parmis d'autres... le principe est de stoker et récupérer le num de la carte dans la bdd, et d'afficher les graffes en fonctions de ce num.

En espérant que ca t'aide un peu...


RE: Include, pour ma mappe - Kassak - 22-02-2007

Justement, je ne sais aps comment l'exploiter a partir ce de code..

Je sais que ca doit être chiant de lire un long code comme ca^^

Mais une petite démo ne me ferais ps de mal, donc si j'ia bien compris je rajoute un champ map_id dans ma table joueur ( sachant que j'ia aussi une table pour les Pnj et pour les batiments ( les cases innaccessible )....et a partir de ca je fais quoi??

et surtout je ne sais pas ou mettre mon include, et que mettre dnas mon include?


RE: Include, pour ma mappe - Kassak - 23-02-2007

Bon la j'y arrive vraiment pas...quoi que je fasse, meme si j'enregistre l'id e la mappe dnas la BDd, des que je clique sur une fleche de deplacement c'est cuit ca revient au début..j'ia viré toutes les modifs que j'avais faites, et je vais repartir du début, quelqu'un peut me dire comment faire un changement de mappe a partir de ça?? Le je suis déséspéré ca fait deja pas mal de jour que j'essaye et que dalle.....


RE: Include, pour ma mappe - Prizor - 23-02-2007

T'es sûr que tu "téléportes" pas ton perso à un point de téléportation sur l'autre map ?
Je m'explique : si ton perso se téléporte exactement sur un point de téléportation, il risque d'être retéléporté automatiquement...

Mais j'ai pas regardé ton code et j'ai jamais essayé de jeu avec map, et en plus peux-être que ton jeu amrche différemment de ce que je pense, donc c'est juste un avis théorique...^^

Sinon, désolé je peux pas t'aider, je m'y connais pas du tout en systèmes de gestion de maps.

Bon courage !


RE: Include, pour ma mappe - Kassak - 23-02-2007

Si vous voulez tester c'est avec plaisir Smile

J'ai viré tout ce que j'avais fait, c'est juste pour que vous voyez comment est ma map :

Site
Login : test
Mdp : test1

vous pourrez juste vous balader sur la map et voir comment elle est...


RE: Include, pour ma mappe - Raoull - 23-02-2007

Ecoute moi j'avais un systeme de map, divisé en pays/régions, où en fait chaque pays était une map diffréente, et donc en arrivant à la frontière d'un pays, hop on débute sur le nouveau pays voisin, une autre map.

Je crois que c'est à peu pres ce que tu cherches à faire.

Mais avant tout, dis moi un truc, pourquoi tu cherches absolument à utiliser un INCLUDE au changement de map ?

A mon avis, tu as du trouver un code ou un tuto qui emploie cette technique, et tu n'arrive pas à la mettre en place . c'est ca ?
Si oui, file la référence, p-e qu'on pourra t'aider à incorporer ce systeme la !
Sinon je vois pas pourquoi tu bloques avec ton INCLUDE que tu sais pas ou placer, ni quoi mettre dedans...


RE: Include, pour ma mappe - Kassak - 23-02-2007

Ma map de base c'est le tuto de carlou, et c'est lui même qui m'a dit que ca pouvait marcher avec un include...
vous avez d'autre solution?? j'attend que ça!

Et je veux faire un include car ca m'a l'air simple a mettre en place, si le personnage est en X/Y, hop on inclue l'autre mappe, mais ca marche pas ( donc je me contredis Oo)
Enfin j'ia expliqué ce qeu cela faisait..


RE: Include, pour ma mappe - Raoull - 23-02-2007

Bon apres avoir testé ta map en ligne, en fait on est coincé au 4 frontière de la carte qui est à l'écran.

Donc tes maps, elles font 18x10 ? c'est tout ? c'est tout petit...

tu peux des grandes maps, mais tu affiches que les ... 10 cases de périmètres autour du perso, qui li reste toujours au milieu de la map affiche. Une sorte de rayon de vision.
Ca me semble plus facile à gérer, mais encore faut coder le petit algo qui calcule les cases autpur du perso, et les affiche.

Peut-être que je t'embrouille la en fait, tout dépend de ce que tu veux, si tu as un eidée précise, explique...


EDIT : tu as répondu entre temps, j'avais pas vu, je prends le temps de réflechir Wink


RE: Include, pour ma mappe - Raoull - 23-02-2007

Bon moi je connais pas la map methode carlou, je m'y suis pas plongé car j'utilise pas du tout la meme methode. Le plus simple c'est qu'il te réponde, si il t'a conseillé un include pour les changements de map; lui ou qlqu'un qui utilise ce systeme.

Moi je faisais autrement.
Soit toutes mes maps faisaientt 100x100, ou alors elles peuvent toutes avoir des tailles différentes, eet dans ce cas tu dois stockées dans une table, la largeur et hauteur de chaque carte.

Ensuite, pour chaque perso, j'ai 3 infos sur sa poistion : id_map, x et y.
J'affiche la map "id_map",je place la case x/y au milieu, avec mon perso dessus, et les 10 cases autour de x/y.
Ensuite j'affiche les autres persos et items qui se trouve aussi sur la map id_map et dans la la périphérie de 10 cases autour de x/y.

Quand mon perso se déplace, je vérifie que x et/ou x arrive pas à 0 ou à la largeur/hauteur de la map id_map. Si c'est le cas, et qu'il avance encore, donc "en dehors" de la map, hop je change id_map pour mon perso : il a changé de pays, enfin de map.

Je recalcule la position x/y sur la map suivante : par exemple si il était en 0/0 (coin haut/gauche) il va apparaitre en 100/100 (coin bas/droite).
J'upadte id_map, x et y pour mon perso, et hop et rebelotte !