JeuWeb - Crée ton jeu par navigateur
CarteAjax ! aide pour simplifier code ! - 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 : CarteAjax ! aide pour simplifier code ! (/showthread.php?tid=1929)

Pages : 1 2


CarteAjax ! aide pour simplifier code ! - opoz - 25-10-2007

Slt, voila mon probléme :

Sur la map j'ai besoin de rendre inaccésible certaine cases !

Donc sa pas de probléme, mais le code est trés lourd et long à faire ! ex:

Code PHP :
<?php 
if($_SESSION[X_joueur]==$x AND $_SESSION[Y_joueur]==$y)

echo
'<td style="background-image:url('.$texture[$carte[$x][$y]].');width:32px;height:32px;text-align:center;">
<img width="16" src="../img/avatar.gif" /></td>'
;

elseif(
// 1ere ligne horizontal.
$x==20 AND $y==0 or $x==20 AND $y==1 or $x==20 AND $y==2 or $x==20 AND $y==3 or
$x==20 AND $y==4 or $x==20 AND $y==5 or $x==20 AND $y==6 or $x==20 AND $y==7 or
$x==20 AND $y==8 or $x==20 AND $y==9 or $x==20 AND $y==10 or $x==20 AND $y==11 or
$x==20 AND $y==12 or $x==20 AND $y==13 or $x==20 AND $y==14 or
$x==20 AND $y==15 or $x==20 AND $y==16 or $x==20 AND $y==17 or $x==20 AND $y==18 or $x==20 AND $y==19 or
// 1ere ligne horizontal.
$x==-1 AND $y==0 or $x==-1 AND $y==1 or $x==-1 AND $y==2 or $x==-1 AND $y==3 or
$x==-1 AND $y==4 or $x==-1 AND $y==5 or $x==-1 AND $y==6 or $x==-1 AND $y==7 or
$x==-1 AND $y==8 or $x==-1 AND $y==9 or $x==-1 AND $y==10 or $x==-1 AND $y==11 or
$x==-1 AND $y==12 or $x==-1 AND $y==13 or $x==-1 AND $y==14 or $x==-1 AND $y==15 or
$x==-1 AND $y==16 or $x==-1 AND $y==17 or $x==-1 AND $y==18 or $x==-1 AND $y==19 or
// 1ere ligne horizontal.
$x==-1 AND $y==20 or $x==0 AND $y==20 or $x==1 AND $y==20 or $x==2 AND $y==20 or
$x==3 AND $y==20 or $x==4 AND $y==20 or $x==5 AND $y==20 or $x==6 AND $y==20 or
$x==7 AND $y==20 or $x==8 AND $y==20 or $x==9 AND $y==20 or $x==10 AND $y==20 or
$x==11 AND $y==20 or $x==12 AND $y==20 or $x==13 AND $y==20 or $x==14 AND $y==20 or
$x==15 AND $y==20 or $x==16 AND $y==20 or $x==17 AND $y==20 or $x==18 AND $y==20 or $x==19 AND $y==20 or $x==20 AND $y==20 or
// 1ere ligne horizontal.
$x==-1 AND $y==-1 or $x==0 AND $y==-1 or $x==1 AND $y==-1 or $x==2 AND $y==-1 or
$x==3 AND $y==-1 or $x==4 AND $y==-1 or $x==5 AND $y==-1 or $x==6 AND $y==-1 or
$x==7 AND $y==-1 or $x==8 AND $y==-1 or $x==9 AND $y==-1 or $x==10 AND $y==-1 or
$x==11 AND $y==-1 or $x==12 AND $y==-1 or $x==13 AND $y==-1 or $x==14 AND $y==-1 or
$x==15 AND $y==-1 or $x==16 AND $y==-1 or $x==17 AND $y==-1 or $x==18 AND $y==-1 or $x==19 AND $y==-1 or $x==20 AND $y==-1 or




// 1ere ligne horizontal.
$x==0 AND $y==0 or $x==0 AND $y==1 or $x==0 AND $y==2 or $x==0 AND $y==3 or
$x==0 AND $y==4 or $x==0 AND $y==5 or $x==0 AND $y==6 or $x==0 AND $y==7 or
$x==0 AND $y==8 or $x==0 AND $y==9 or $x==0 AND $y==10 or $x==0 AND $y==11 or
$x==0 AND $y==15 or $x==0 AND $y==16 or $x==0 AND $y==17 or $x==0 AND $y==18 or $x==0 AND $y==19 or
// 2eme ligne horizontal.
$x==1 AND $y==0 or $x==1 AND $y==1 or $x==1 AND $y==2 or $x==1 AND $y==3 or
$x==1 AND $y==4 or $x==1 AND $y==5 or $x==1 AND $y==6 or $x==1 AND $y==7 or
$x==1 AND $y==8 or $x==1 AND $y==9 or $x==1 AND $y==10 or $x==1 AND $y==11 or $x==1 AND $y==12 or
$x==1 AND $y==15 or $x==1 AND $y==16 or $x==1 AND $y==17 or $x==1 AND $y==18 or $x==1 AND $y==19 or
// 3eme ligne horizontal.
$x==2 AND $y==0 or $x==2 AND $y==1 or $x==2 AND $y==2 or $x==2 AND $y==3 or
$x==2 AND $y==4 or $x==2 AND $y==5 or $x==2 AND $y==6 or $x==2 AND $y==7 or $x==2 AND $y==8 or
$x==2 AND $y==15 or $x==2 AND $y==16 or $x==2 AND $y==17 or $x==2 AND $y==18 or $x==2 AND $y==19 or
// 4eme ligne horizontal.
$x==3 AND $y==0 or $x==3 AND $y==1 or $x==3 AND $y==2 or $x==3 AND $y==3 or $x==3 AND $y==4 or
$x==3 AND $y==16 or $x==3 AND $y==17 or $x==3 AND $y==18 or $x==3 AND $y==19 or
// 5eme ligne horizontal.
$x==4 AND $y==0 or $x==4 AND $y==1 or $x==4 AND $y==2 or
$x==4 AND $y==16 or $x==4 AND $y==17 or $x==4 AND $y==18 or $x==4 AND $y==19 or
// 6eme ligne horizontal.
$x==5 AND $y==1 or $x==5 AND $y==17 or $x==5 AND $y==18 or
// 6eme ligne horizontal.
$x==6 AND $y==1 or $x==6 AND $y==18 or
// 10eme ligne horizontal.
$x==9 AND $y==18 or
// 13eme ligne horizontal.
$x==12 AND $y==18 or
// 14eme ligne horizontal.
$x==13 AND $y==18 or
// 15eme ligne horizontal.
$x==14 AND $y==18 or
// 16eme ligne horizontal.
$x==15 AND $y==1 or $x==15 AND $y==17 or $x==15 AND $y==18 or
// 17eme ligne horizontal.
$x==16 AND $y==1 or $x==16 AND $y==2 or $x==16 AND $y==3 or
$x==16 AND $y==16 or $x==16 AND $y==17 or $x==16 AND $y==18 or
// 18eme ligne horizontal.
$x==17 AND $y==1 or $x==17 AND $y==2 or $x==17 AND $y==3 or $x==17 AND $y==4 or
$x==17 AND $y==16 or $x==17 AND $y==17 or $x==17 AND $y==18 or
// 19eme ligne horizontal.
$x==18 AND $y==1 or $x==18 AND $y==2 or $x==18 AND $y==3 or $x==18 AND $y==4 or $x==18 AND $y==5 or
$x==18 AND $y==13 or $x==18 AND $y==14 or $x==18 AND $y==15 or $x==18 AND $y==16 or $x==18 AND $y==17 or $x==18 AND $y==18 or
// 19eme ligne horizontal.
$x==19 AND $y==1 or $x==19 AND $y==2 or $x==19 AND $y==3 or $x==19 AND $y==4 or $x==19 AND $y==5 or $x==19 AND $y==6 or
$x==19 AND $y==11 or $x==19 AND $y==12 or
$x==19 AND $y==13 or $x==19 AND $y==14 or $x==19 AND $y==15 or $x==19 AND $y==16 or $x==19 AND $y==17 or $x==19 AND $y==18 or

// 1ere ligne vertical.
$x==5 AND $y==0 or $x==6 AND $y==0 or $x==7 AND $y==0 or $x==8 AND $y==0 or $x==9 AND $y==0 or
$x==10 AND $y==0 or $x==11 AND $y==0 or $x==12 AND $y==0 or $x==13 AND $y==0 or $x==14 AND $y==0 or
$x==15 AND $y==0 or $x==16 AND $y==0 or $x==17 AND $y==0 or $x==18 AND $y==0 or $x==19 AND $y==0 or
// 19eme ligne vertical.
$x==5 AND $y==19 or $x==6 AND $y==19 or $x==7 AND $y==19 or $x==8 AND $y==19 or $x==9 AND $y==19 or
$x==10 AND $y==19 or $x==11 AND $y==19 or $x==12 AND $y==19 or $x==13 AND $y==19 or $x==14 AND $y==19 or
$x==15 AND $y==19 or $x==16 AND $y==19 or $x==17 AND $y==19 or $x==18 AND $y==19 or $x==19 AND $y==19 )

echo
'<td style="cursor:no-drop;background-image:url('.$texture[$carte[$x][$y]].');width:32px;height:32px;"></td>';



Voyez, je n'est pas trouvé de solution pour le réduire, j'ai penser au boucle mais pour la mise en place, sa n'a pas été concluant !

Si qq as une solution, c'est avec plaisir !


RE: CarteAjax ! aide pour simplifier code ! - jo_link_noir - 26-10-2007

j'avoue, c'est violent O_o

j'ai pas de solution miracle mais je peux d'ors et déjà dire que le if peut-être réduit

alors la première partie du if :
Citation :// 1ere ligne horizontal.
$x==20 AND $y==0 or $x==20 AND $y==1 or $x==20 AND $y==2 or $x==20 AND $y==3 or
$x==20 AND $y==4 or $x==20 AND $y==5 or $x==20 AND $y==6 or $x==20 AND $y==7 or
$x==20 AND $y==8 or $x==20 AND $y==9 or $x==20 AND $y==10 or $x==20 AND $y==11 or
$x==20 AND $y==12 or $x==20 AND $y==13 or $x==20 AND $y==14 or
$x==20 AND $y==15 or $x==20 AND $y==16 or $x==20 AND $y==17 or $x==20 AND $y==18 or $x==20 AND $y==19 or

là t'arrête pas de dire $x=20, pour commencer du l'appel une fois et ensuite tu vérifie les y :
$x==20 AND ($y==0 or $y==1 or ..... $y==19)

et tu peux encore réduire en regardant si les "y" sont comprit entre 0 et 19.
Citation :$x==20 AND ($y>=0 AND $y<=19)
Si par hasard tu ne veux pas le 17 par ex :
$x==20 AND ($y>=0 AND $y<=19 AND $y!=17)
et voilà, le premier bloc est réduit et la même méthode peut se répéter à tous

voilà, pas d'autre idée, y a surement plus simple, je ne sais pas Big Grin

bonne nuit


RE: CarteAjax ! aide pour simplifier code ! - opoz - 26-10-2007

Slt, j'croi que tu as trouver la meilleure solution ! merci à toi !

Alors pour voir sa donne sa :

Code PHP :
<?php 
elseif (
// en partant du haut

// Ligne -1 horizontal
$x==-1 AND ($y>=-1 AND $y<=20) or
// Ligne 0 horizontal
$x== 0 AND ($y>=-1 AND $y<=20 AND $y!=12 AND $y!=13 AND $y!=14) or
// Ligne 1 horizontal
$x== 1 AND ($y>=-1 AND $y<=20 AND $y!=13 AND $y!=14) or
// Ligne 2 horizontal
$x== 2 AND ($y>=-1 AND $y<=9) or $x== 2 AND ($y>=15 AND $y<=20) or
// Ligne 3 horizontal
$x== 3 AND ($y>=-1 AND $y<=4) or $x== 3 AND ($y>=15 AND $y<=20) or
// Ligne 4 horizontal
$x== 4 AND ($y>=-1 AND $y<=3) or $x== 4 AND ($y>=16 AND $y<=20) or
// Ligne 5 horizontal
$x== 5 AND ($y>=-1 AND $y<=2) or $x== 5 AND ($y>=17 AND $y<=20) or
// Ligne 6 horizontal
$x== 6 AND ($y>=-1 AND $y<=1) or $x== 6 AND ($y>=18 AND $y<=20) or
// Ligne 7 horizontal
$x== 7 AND ($y>=-1 AND $y<=1) or $x== 7 AND ($y>=19 AND $y<=20) or
// Ligne 8 horizontal
$x== 8 AND ($y>=-1 AND $y<=0) or $x== 8 AND ($y>=18 AND $y<=20) or
// Ligne 9 horizontal
$x== 9 AND ($y>=-1 AND $y<=0) or $x== 9 AND ($y>=18 AND $y<=20) or
// Ligne 10 horizontal
$x== 10 AND ($y>=-1 AND $y<=0) or $x== 10 AND ($y>=18 AND $y<=20) or
// Ligne 11 horizontal
$x== 11 AND ($y>=-1 AND $y<=0) or $x== 11 AND ($y>=18 AND $y<=20) or
// Ligne 12 horizontal
$x== 12 AND ($y>=-1 AND $y<=0) or $x== 12 AND ($y>=18 AND $y<=20) or
// Ligne 13 horizontal
$x== 13 AND ($y>=-1 AND $y<=0) or $x== 13 AND ($y>=18 AND $y<=20) or
// Ligne 14 horizontal
$x== 14 AND ($y>=-1 AND $y<=0) or $x== 14 AND ($y>=17 AND $y<=20) or
// Ligne 15 horizontal
$x== 15 AND ($y>=-1 AND $y<=1) or $x== 15 AND ($y>=16 AND $y<=20) or
// Ligne 16 horizontal
$x== 16 AND ($y>=-1 AND $y<=4) or $x== 16 AND ($y>=16 AND $y<=20) or
// Ligne 17 horizontal
$x== 17 AND ($y>=-1 AND $y<=4) or $x== 17 AND ($y>=16 AND $y<=20) or
// Ligne 18 horizontal
$x== 18 AND ($y>=-1 AND $y<=6) or $x== 18 AND ($y>=13 AND $y<=20) or
// Ligne 19 horizontal
$x== 19 AND ($y>=-1 AND $y<=20 AND $y!=7) or
// Ligne 20 horizontal
$x==20 AND ($y>=-1 AND $y<=20)

)


Oui, beaucoup mieu ! :wowowow:


RE: CarteAjax ! aide pour simplifier code ! - NicoMSEvent - 26-10-2007

Pourquoi ne mettrais tu pas ces valeurs dans une table de ta base de données?
tu n'aurais qu'une requete pour faire tous ces test, avec des BETWEEN ou des IN...


RE: CarteAjax ! aide pour simplifier code ! - Loetheri - 26-10-2007

Je ne sais pas pourquoi tu as besoin de ces conditions mais permets-moi de te dire que cela sera totalement fixe et ingérable si tu souhaites changer par après -_-'


RE: CarteAjax ! aide pour simplifier code ! - opoz - 26-10-2007

Loetheri a écrit :Je ne sais pas pourquoi tu as besoin de ces conditions mais permets-moi de te dire que cela sera totalement fixe et ingérable si tu souhaites changer par après -_-'


Slt, c'est condition servent as empecher le joueur de se déplacer dessus ! par exemple :

Le joueur est sur une ile, mais il n'as pas de barque ou autre...
==> Ils ne peut pas se déplacer sur l'eau !

Et sa délimite la fin de la map ! sinon avec le script de la mapAjax dans la section script ! elle est infinie, tant que tu te déplace méme s'il n'y as plus d'image tu avance ! sa génére de la map ! donc j'ai trouver cette méthode pour empécher le joueur de cliquer la ou il ne peut se déplacer !

Voila, si tu as trouver une méthode plus simple à mettre en place, vas y envoi ! :good:

OPOZ !


RE: CarteAjax ! aide pour simplifier code ! - Loetheri - 26-10-2007

Oui, il existe des méthodes plus "simples" mais surtout qui te permettront de modifier nettement plus rapidement ton jeu cas de changement (ou de volonté).

Pour cela, il suffit de donner un type/catégorie/autretrucdugenre et de vérifier que le type de la case permette de se déplacer (ou non). C'est plus simple à gérer mais plus complexe à mettre en oeuvre. Cela dit, c'est totalement faisable ^^


RE: CarteAjax ! aide pour simplifier code ! - Harparine - 26-10-2007

Salut !

Je crois que j'utiliserais un array (ou une table de données) contenant les coordonnées des cases inaccessibles. Lors de la boucle qui construit ta carte, tu n'as plus qu'à vérifier si ta case est accessible ou pas (et tu rajoutes alors un type infranchissable).

Mais je crois que c'est quelque chose que tu devrais préciser directement dans ton fichier/table de carte : c'est la méthode que j'utilise. Le type de terrain de chaque case est alors stocké dans un fichier (xml pour moi) et si la case est infranchissable mon constructeur de carte l'applique tout de suite.

@+ Wink


RE: CarteAjax ! aide pour simplifier code ! - opoz - 26-10-2007

Slt, ouai sa semble étre une bonne idée !

Mais le probléme c'est que par map j'ai 400 images differente !

ex :

Code PHP :
<?

$chemin_texture
= "img_terre_1";
$debut_nom_texture = "terre_1_";

$texture[0]=''.$chemin_texture.'/'.$debut_nom_texture.'0-0.JPG';
$texture[1]=''.$chemin_texture.'/'.$debut_nom_texture.'0-1.JPG';
$texture[2]=''.$chemin_texture.'/'.$debut_nom_texture.'0-2.JPG';
$texture[3]=''.$chemin_texture.'/'.$debut_nom_texture.'0-3.JPG';
$texture[4]=''.$chemin_texture.'/'.$debut_nom_texture.'0-4.JPG';
$texture[5]=''.$chemin_texture.'/'.$debut_nom_texture.'0-5.JPG';
$texture[6]=''.$chemin_texture.'/'.$debut_nom_texture.'0-6.JPG';
$texture[7]=''.$chemin_texture.'/'.$debut_nom_texture.'0-7.JPG';
$texture[8]=''.$chemin_texture.'/'.$debut_nom_texture.'0-8.JPG';
$texture[9]=''.$chemin_texture.'/'.$debut_nom_texture.'0-9.JPG';
$texture[10]=''.$chemin_texture.'/'.$debut_nom_texture.'0-10.JPG';
$texture[11]=''.$chemin_texture.'/'.$debut_nom_texture.'0-11.JPG';
...
$texture[394]=''.$chemin_texture.'/'.$debut_nom_texture.'19-14.JPG';
$texture[395]=''.$chemin_texture.'/'.$debut_nom_texture.'19-15.JPG';
$texture[396]=''.$chemin_texture.'/'.$debut_nom_texture.'19-16.JPG';
$texture[397]=''.$chemin_texture.'/'.$debut_nom_texture.'19-17.JPG';
$texture[398]=''.$chemin_texture.'/'.$debut_nom_texture.'19-18.JPG';
$texture[399]=''.$chemin_texture.'/'.$debut_nom_texture.'19-19.JPG';

?>


Tu vois, je crée ma carte et je la découpe ! aucune image ne se répéte !

Dans mon cas je pense que ma solution est bien ?

je sait pas, qu'en pense tu ?

OPOZ !


RE: CarteAjax ! aide pour simplifier code ! - Harparine - 27-10-2007

Justement, si tu as des tas d'images, tu peux enregistrer le chemin de tes images dans chaque fichier carte (ou dans la base de données) plutôt que d'utiliser un tableau difficile à mettre à jour. Le principe reste le même. Après, tu peux mettre en place un système d'éditeur de cartes simple avec upload d'images une à une (ça te permettra d'agrandir ton monde sans pour autant devoir te replonger dans ton code à chaque fois) ou bien tu codes un petit truc avec GD qui te découpe automatiquement ton image de base en cases que tu n'auras plus qu'à remplir avec des informations de jeu...

Mais je ne sais pas vraiment comment tu es organisé : peut-être que ma proposition est inapplicable. Enfin, réfléchit bien à ton système avant de commencer... Par exemple, 400 images différentes, c'est très lourd à charger pour le joueur, surtout les petites connexions et ça va te ruiner ta bande passante (tu es quasi obligé de prendre un hébergement avec bande passante illimitée). Il faut aussi penser aux décors, aux persos, aux objets que tu vas rajouter dessus, ce qui risque de multiplier tes images.

Je vois dans ton exemple que tu as des dizaines d'images de terre : peut-être devrais-tu tourner avec quelques images aléatoires pour éviter le côté répétitif de tes textures sans pour autant avoir des images uniques à chaque fois ? Après, il faut voir aussi du côté des performances : est-ce que c'est véritablement utile de découper ta carte en cases alors que tu n'as rien de répétitif dans tes images : peut-être vaudrait-il mieux avoir des fond fixes en une seule image avec cases virtuelles réactives (comme un calque) par dessus (bien moins gourmand en volume et en performances) mais cela t'oblige à adopter un principe de "zones" de cartes, comme dans Dofus, plutôt qu'une immense carte qui se découvre devant les pieds du joueur...

Bref, chacun a un peu son système pour développer sa carte mais il faut, dans tous les cas, y réfléchir soigneusement avant de te lancer dans le code parce que tu peux rapidement avoir un jeu difficile à jouer car peu fluide. Peut-être que si tu nous en dis plus sur ton système, on verra un peu mieux comment t'aider... De toutes manières, ton système actuel n'est pas viable sur le long terme : il exclut quasiment toute possibilité de développement ultérieur.

Bonne chance ! @+ Wink