JeuWeb - Crée ton jeu par navigateur
Une map bien définie - 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 : Une map bien définie (/showthread.php?tid=1894)

Pages : 1 2 3 4


Une map bien définie - Deenesse - 17-10-2007

Bonsoir à tous,

Voilà maintenant quelques mois que je pratique le PHP et je me suis lancé il y a peu dans la création d'un petit jeu RPG.
J'ai trouvé sur un site un tuto pour créer une map.

Donc tout va bien ca me l'affiche bien, mais je voudrais faire une chose non expliquée dans le tuto.

Explications :

Je voudrais en faite faire une map par exemple de 20 cases sur 10, et lorsque l'on arrive au bord on ne puisse pas continuer.

Seconde chose, j'arrive à afficher le numero des lignes mais pas celui des colonnes :heuuu:

Voici le code de ma map, s'il vous manque quelque chose je rajouterai Wink
Merci d'avance pour votre aide.

Code PHP :
<?php 
$recup
= mysql_query("SELECT nom,posx,posy FROM persos WHERE nom='$pseudo'") or die(mysql_error());

$fetch = mysql_fetch_assoc($recup);

$posx = $fetch['posx'];
$posy = $fetch['posy'];
$id = $fetch['id'];

$compteurX = $posx - 10;
$compteurY = $posy + 10;

$finX = $posx + 10;
$finY = $posy - 5;

$debutX = $posx - 10;
$debutY = $posy - 5;

while ((
$compteurX >= finX))
{
echo
"<div>$compteurX</div> \n";
$compteurX++;
}
while((
$compteurY >= $finY) )
{

echo
"<div class='ligneMap'> \n";


while(
$compteurX <= $finX) {
echo
"\t\t\t\t\t\t\t", '<div class="caseMap">';
$test = mysql_query("SELECT id,nom,skin FROM persos WHERE posx='$compteurX' AND posy='$compteurY'") or die(mysql_error());
if(
mysql_num_rows($test) == 1) {
$data = mysql_fetch_assoc($test);

echo
'<div class="'. $data['skin']. '"><a href=>'. $data['id'] .'<span><font size="6"><u>'. $data['nom'] .' ('.$data['id'].')</u></font><br/>
Race : '
.$data['skin'].'</span></a></div>';

}
echo
"</div> \n";

$compteurX++;
}

echo
"\t\t\t\t\t\t $compteurY</div> \n";


$compteurX = $debutX; //

$compteurY--;
}
[/
php]
[/quote][/b]


RE: Une map bien définie - Sephi-Chan - 18-10-2007

En voyant le code, je me suis dis que je me devais de t'aider... Mais pas en répondant à ta question.
Je tenais à signaler que la requête faite dans la boucle est un véritable gouffre en ressources puisqu'elle se répète de multiples fois (20 fois je crois).

Étant fatigué et pas spécialement amateur de cartographie, je ne peux t'aider pour le moment. Mais d'autres ont beaucoup travaillé sur des cartes et seront donc à même de t'aider.


Sephi-Chan


RE: Une map bien définie - Deenesse - 18-10-2007

Il me suffit donc de la sortir de la boucle ?


RE: Une map bien définie - Galaan - 18-10-2007

Pour la requete dans la boucle c'est sur que c'est mieux de la sortir de la mais ca t'oblige a modifier un peu le code.

Ton morceau code ne me semble pas gerer les deplacement des persos donc dificle de te dire comment empecher le persos de sortir de la carte.

Sinon tom problemeest tu ne vois pas le
echo "\t\t\t\t\t\t $compteurY</div> \n"; ?
Tu vois quoi a la place ?

Galaan


RE: Une map bien définie - Deenesse - 18-10-2007

Si si j'ai une gestion des déplacements Smile

voici ce que je vois lorsque je suis sur map.php :

[Image: map.JPG]

Citation :echo "\t\t\t\t\t\t $compteurY</div> \n";
Ce code permet d'afficher le N° de la ligne mais pas de la colonne :S

Merci ^^


RE: Une map bien définie - Loetheri - 18-10-2007

Dans ta requete SQL, utilise la commande BETWEEN. Cela te servira.
Va peut-être voir comment d'autres ont fait. Il existe deux voire trois même peut-être quatre tutoriels sur les cartes de jeu.

Pour les colonnes, tu fais une boucle du type for ou while sur une ligne (<tr>) en faisant défiler les cases (<td>) et en les remplissant de ton plus petit x à ton plus grand x.

Pour ne pas dépasser de la carte, il s'agit là simplement de conditions. C'est très simple si ta carte a une dimension fixe car tu peux coder cela en dur. Si tu souhaites passer par un système dynamique, je te conseille d'abandonner la base SQL (que je te conseille de toute façon d'abandonner au final ^^).


RE: Une map bien définie - Galaan - 18-10-2007

Donc c'est ca que tu ne vois pas :
Code PHP :
<?php 
while (($compteurX >= finX))
{
echo
"<div>$compteurX</div> \n";
$compteurX++;
}
Et c'est normale puisque $compteurX demare a :
$compteurX = $posx - 10;
et $finX = $posx + 10;
donc ton while n'est jamais vrai.
a mon avis
Code PHP :
<?php 
while ($compteurX <= finX)
serait plus juste.
C'est vrai qu'une seule requete du style :
Code PHP :
<?php 
SELECT id
,
nom,
skin
FROM persos
WHERE posx
<= $posx - 10
AND posx >= $posx + 10
AND posy <= $posy - 10
AND posy >= $posy + 10
Serait plus approprie . Mais ca t'oblige a changer pas mal de code.

Galaan


RE: Une map bien définie - Dradge - 18-10-2007

Pour afficher la carte je te conseille un code du genre :
Code PHP :
<?php 
$sql
= mysql_query("SELECT id, nom, skin FROM persos WHERE (posx BETWEEN $posx - 10 AND $posx + 10) AND (posy BETWEEN $posy - 10 AND $posy + 10) ORDER BY posy, posx");
//Dans cette requete, les cases sont rangées par lignes, de haut en bas.
$perso = mysql_fetch_assoc($sql);

for(
$i=$posy-10;$i<$posy+10;$i++){
echo
'<tr><td>',$i,'</td>';
for(
$i=$posy-10;$i<$posy+10;$i++){
if(
$i==$perso['posy'] && $j==$perso['posx']){
echo
'<td>...</td>';
$perso = mysql_fetch_assoc($sql);
}
else{
echo
'<td></td>';
}
}
echo
'</tr>';
}

Bon après faut penser à faire une première boucle pour afficher les coordonnées X au dessus du tableau, et tout les petits détails. Mais le principe est là.

J'espère avoir pu apporter mon aide.


RE: Une map bien définie - Deenesse - 18-10-2007

Merci à tous je vais essayer tout cela tout à l'heure Wink
Je vous tiens au courant Smile


RE: Une map bien définie - Zamentur - 18-10-2007

oui moi aussi je conseille les tableaux html plutot que les div et span c'est beaucoup moins complexe à mettre en oeuvre et surtout dans le cas d'une map par case c'est pas aberent d'utiliser un tableaux