Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2391 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Gérer des déplacements pour un jeu en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Gérer des déplacements pour un jeu en PHP

n°833423
Mister_Pin​gouin
Posté le 26-08-2004 à 23:27:13  profilanswer
 

Bonsoir !
Je voudrais faire un jeu PHP sur le thème du seigneur des anneaux, et lors de mes recherches je suis tombé sur ce site :
 
http://enefel.le.jeu.free.fr/carte.php?id_match=272
 
et je trouve ca vraiment excellent.
J'ai essayé cette apresmidi de trouver comment il fait, mais j'avoue que je coince :
 
Pour l'instant ma page d'index positionne les joueurs sur les différents <div>, selon leurs coordonnées entrées dans la base de données .
 
Par contre problème de taille :
Comment faire pour que le joueur qui est loggué sous tel pseudo puisse bouger son bonhomme dans les 8 cases adjacentes (en cliquant dessus) et pas dans les autres cases ?
 
En gros, il faudrait que les 8 cases (ou moins s'il est contre un bord) autour du bonhomme soit cliquable avec un lien du style :
<a href="deplacement.php?joueur=machin&coord=X-Y" > avec les coordonnées de la nouvelle case à la place de X-Y.
Par contre toutes les autres cases ne seraient pas cliquables.
 
C'est un peu chaud nan ?
Ou alors je me complique la vie pour rien ?  :??:  
 
Merci d'avance de m'aider  :bounce:

mood
Publicité
Posté le 26-08-2004 à 23:27:13  profilanswer
 

n°833458
Berceker U​nited
PSN : berceker_united
Posté le 26-08-2004 à 23:53:59  profilanswer
 

perso j'aurais fais un tableau et chaque case du tableau correspond a une coordonnée X-Y qui serait enregistrer dans un variable de type array.

n°833465
Mister_Pin​gouin
Posté le 27-08-2004 à 00:00:26  profilanswer
 

euh...
ouais, mais je vois pas trop comment faire...
voici mon code :
 

Code :
  1. <?
  2. $req = mysql_query("SELECT * FROM xxxx ORDER BY id DESC " );
  3. $Login="Pingu";
  4. $c=0;
  5. while($result=mysql_fetch_array($req)) {
  6. $id[$c]=$result['id'];
  7. $coord[$c]=$result['coord'];
  8. $icone[$c]=$result['icone'];
  9. $login[$c]=$result['Login'];
  10. $c++;
  11. }
  12. for($y=0;$y<=15;$y++)
  13. {
  14. for($x=0;$x<=30;$x++)
  15. {
  16.  echo '<div class="fond_terrain">';
  17.  for($a=0;$a<$c;$a++)
  18.  {
  19.   if($y.$x === $coord[$a]) {
  20.    echo '<a href="popup.php?player='.$id[$a].'" onClick="window.open(\'\',\'popup\',\'width=400,height=300,scrollbars=0\')" target="popup">';
  21.    echo '<img src="';
  22.    if($Login == $login[$a]) {
  23.     echo $icone[$a].'_tour';
  24.    }
  25.    else {
  26.     echo $icone[$a];
  27.    }
  28.    echo '.gif" title="'.$login[$a].'" alt="'.$login[$a].'"/></a>';
  29.   }
  30.  }
  31.  echo "&nbsp</div>";
  32. }
  33. echo '<br style="clear:both;" />';
  34. }
  35. mysql_close();
  36. ?>


 
parce que si je met dans un tableau, comment faire pour que seule les 8 cases autour du bonhomme soit cliquables ?
Et comment faire comprendre à PHP les coordonnées exactes de la case ?
 
j'avoue que je rame...


Message édité par Mister_Pingouin le 27-08-2004 à 00:02:24
n°833471
Berceker U​nited
PSN : berceker_united
Posté le 27-08-2004 à 00:06:51  profilanswer
 

tu génère un tableau html dynamiquement a partir des information que tu lui donne. A chaque fois qu'il va générer tu poses la question "quoi doit etre à l'interieur" il y aura forcement un concordence entre la position de cette case et le personnage qui doit y etre.

n°833474
Ayuget
R.oger
Posté le 27-08-2004 à 00:07:50  profilanswer
 

soit $posx l'abcisse du joueur et $posy l'ordonnée, tu fait un test
 

Code :
  1. if( (abs($posx-$x)<=1) && (abs($posy-$y)<=1) )
  2. {
  3. echo '<a href="pouet">Bouger</a>';
  4. }
  5. else
  6. {
  7. echo 'pas bouger';
  8. }


Message édité par Ayuget le 27-08-2004 à 00:08:26
n°833478
Mister_Pin​gouin
Posté le 27-08-2004 à 00:16:09  profilanswer
 

oki les gars je vais tester ca demain =)
merci encore ! ;)
 
EDIT : ca marche vs etes les meilleurs :)


Message édité par Mister_Pingouin le 27-08-2004 à 00:39:24
n°834371
Mister_Pin​gouin
Posté le 27-08-2004 à 17:06:41  profilanswer
 

Ok, par contre maintenant j'ai un nouveau probleme :/
 
Comment faire pour que si l'image d'un autre joueur soit dans les 8 cases adjacentes, le lien ne s'affiche pas ?
Parce que jusque la, le lien s'affiche au dessus de l'image, donc le joueur peut se superposer à un autre personnage :/
 
voici mon code :

Code :
  1. <?
  2. $Login = "Pingu";
  3. $c=0;
  4. while($result=mysql_fetch_array($req)) {
  5. $id[$c]=$result['id'];
  6. $coordx[$c]=$result['coordx'];
  7. $coordy[$c]=$result['coordy'];
  8. $icone[$c]=$result['icone'];
  9. $login[$c]=$result['Login'];
  10. $c++;
  11. }
  12. for($y=0;$y<=3;$y++)
  13. {
  14. for($x=0;$x<=3;$x++)
  15. {
  16.  echo '<div class="fond_terrain">'."\n";
  17.  for($a=0;$a<$c;$a++)
  18.  {
  19.   $case='';
  20.   if($y.$x === $coordy[$a].$coordx[$a]) {
  21.    $case.='<a href="popup.php?player='.$id[$a].'" onClick="window.open(\'\',\'popup\',\'width=400,height=300,scrollbars=0\')" target="popup">';
  22.    $case.='<img src="';
  23.    if($Login == $login[$a]) { $case.=$icone[$a].'_tour'; }
  24.    else { $case.=$icone[$a]; }
  25.    $case.='.gif" title="'.$login[$a].'" alt="'.$login[$a].'"/></a>';
  26.   }
  27.   if((abs($coordx[$a]-$x) <= 1) && (abs($coordy[$a]-$y) <= 1) &&(abs($coordx[$a]-$x)+abs($coordy[$a]-$y) !==0) && ($login[$a]==$Login))
  28.   {
  29.    $case.='<a href="move.php?cx='.$x.'&amp;cy='.$y.'">ici</a>';
  30.   }
  31.   echo $case; // c'est ici que ca coince : lors du premier passage de la boucle, l'image d'un joueur s'affiche, et lors du 2e passage, un lien se pose au dessus :/
  32.  }
  33.  echo "\n</div>\n";
  34. }
  35. echo '<br style="clear:both;" />';
  36. }
  37. mysql_close();
  38. ?>


Message édité par Mister_Pingouin le 27-08-2004 à 17:07:09
n°834559
mejero
Posté le 27-08-2004 à 20:01:39  profilanswer
 

Tu peux aussi faire un truc tout con, c'est un tableau à côté de ta map qui propose les huit directions choisissable via un bouton radio ou une image cliquable. Suffit de mettre ou non le bouton/image sous réserve que la case est atteignable ou non, pour ca tu rajoutes sur ta case un attribut qui la rend atteignable (si t'as un arbre sur ta case, elle sera pas atteignable par exemple :) ) + test si y'a un perso sur la case (si t'autorise plusieurs perso par case pas besoin du test) + test sur la coordonnée (si en dehors de la map alors inatteignable). J'espère avoir été assez clair :)
 
Ca évite de surcharger ta map avec un div cliquable et je trouve ca plus clair.
Et tu peux répéter ce principe si tu utilise l'orientation du perso sauf que la tu poses toutes les orientations possibles, pas besoin d'en empêcher.
 
Bonne chance pour la suite de ton jeu ;)


Message édité par mejero le 27-08-2004 à 20:02:58
n°834573
Mister_Pin​gouin
Posté le 27-08-2004 à 20:12:31  profilanswer
 

excellente idée :)
je vais m'y mettre..
 
par contre, ca va peut etre paraitre stupide, mais je ne vois pas du tout comment tester si une case est vide ou occupée (par un joueur,arbre,etc...)

n°834677
mejero
Posté le 27-08-2004 à 21:42:13  profilanswer
 

Comment tu dessines ta carte ? comment tu sais dans quelle case se trouve chaque perso ?
 

Citation :

$id[$c]=$result['id'];  
     $coordx[$c]=$result['coordx'];  
     $coordy[$c]=$result['coordy'];  
     $icone[$c]=$result['icone'];  
     $login[$c]=$result['Login'];  


Je suppose que la dedans tu sais pour chaque coordonnées quel est le pseudo présent (en passant, c'est mieux de travailler avec des id que des pseudos pour des raisons de sécurité entres autres, si pseudo représente bien un perso). Si c'est pas ca, bah expliques voir comment tu sais qui se trouve ou :)

mood
Publicité
Posté le 27-08-2004 à 21:42:13  profilanswer
 

n°834718
Mister_Pin​gouin
Posté le 27-08-2004 à 22:22:05  profilanswer
 

ba en fait, regarde mon code, je trace d'abord la premiere ligne d'ordonnée 0, ensuite je trace 30 case dans cette ligne, puis la ligne d'ordonnée 1 etc...
 
A chaque case tracée, je vérifie que le couple de coordonnée existe pour un membre. Si il existe alors on place <img src> sinon on continue de tracer.

n°834824
Mister_Pin​gouin
Posté le 27-08-2004 à 23:47:52  profilanswer
 

ok, j'ai trouvé maintenant ca marche
 
par contre, comment faire pour que dans une boucle le nombre de départ soit 00 puis 01, 02, etc ...
Pareil lors de l'insertion ds Mysql (le 02 devient 2)
 
J'ai essayé avec :

Code :
  1. if($coord_x<=9) $coord_x = '0'.$coord_x;


mais ca fait tout bugué au niveau du placement des persos.
Si j'enlève les guillemets autour du 0, ca me met un message d'erreur :/


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Gérer des déplacements pour un jeu en PHP

 

Sujets relatifs
Besoin d'aide php svp[php] Zone de texte avec option de mise en forme
[PHP] URL Rewriting et formulaires [résolu]que faut il pour bien dév. en PHP
[PHP/HTTP] simuler une requete POSThtml en php
Incrémenter / Décrémenter des bases Mysql entres elles en PHPUpload en php
[php]Image de protection contre les spam bots [résolu][PHP] BBCode vers html problème avec <br>
Plus de sujets relatifs à : Gérer des déplacements pour un jeu en PHP


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)