JeuWeb - Crée ton jeu par navigateur
[Javascript] Inverser les X et Y d'un tableau de façon élégante - 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 : [Javascript] Inverser les X et Y d'un tableau de façon élégante (/showthread.php?tid=6094)

Pages : 1 2


[Javascript] Inverser les X et Y d'un tableau de façon élégante - Maks - 19-04-2012

Yop Smile J'ai une problème syntaxique à vous soumettre en Javascript.

Rapidement, je dois m'adapter à l'API d'une classe de pathfinding nommée Graph, fournie par un programmeur meilleur en algo que moi Confusediffle:

Deux différences avec mon implémentation :
- Mes obstacles sont référencés dans un tableau en 2 dimensions X et Y avec une valeur > 0

Or pour construire son algo, la classe Graph utilise des 0 et 1.

Bref c'est pas très compliqué, je fais le remplacement en mappant les deux tableaux, en fonction des collisions joueurs & décors et en excluant le joueur principal.

Le plus problématique, c'est que le tableau de la classe Graph est de la forme [X, Y], et le mien [Y, X] (j'ai toujours fait comme ça, suis-je "normal" ? ^^). De ce fait il faut que j'inverse les lignes et les colonnes de tableau.

Bien sûr, il suffirait de créer un nouveau tableau, de boucler, de tout replacer dedans. Mais je me demandais si quelqu'un avait rencontré le problème, et une solution plus élégante/propre à proposer Smile

	
/*
* On parcoure le calque des passages selon les Y
*/

var preGraph = map.passages.map(function (line, y) {

/*
* On parcoure la ligne du calque des passages selon les X
*/

return (

line.map(function (row, x) {

/*
* On vérifie s'il y'a une collision avec un obstacle ou un Personnage différent du joueur
* Si c'est le cas on assigne la valeur 1, sinon 0
*/

return (map.isBlocked(x, y) || (map.isCollide(x, y) && joueur.x !== x && joueur.y !== y)) ? 1 : 0;

})
);
});

Quelques précisions :
- isBlocked() vaut vrai s'il y a une collision avec le décors
- isCollide() vaut vrai s'il y a une collision avec un Personnage



RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - niahoo - 19-04-2012

ben oui il y a une solution plus élégante, récupérer un tableau [X, Y] et pas [Y,X], ça doit pas être bien compliqué à inverser.



RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Hideaki - 19-04-2012

Idem que niahoo inverse tes entrées dès le départ pour éviter cette transformation.


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Maks - 19-04-2012

Ca serait aller contre ma manière de penser (je réfléchis d'abord en Y, puis en X) et m'obligerait à modifier l'ensemble de mon code source, de mon éditeur de carte, pour une seule classe...

Je me demande si je ne peux pas utiliser apply() sur le prototype de Array.reverse() et le tableau afin d'en inverser le sens


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - niahoo - 19-04-2012

Ben c'est la classe qu'il faut modifier alors.

ou sinon, mais c'est plus complexe, ne pas créer des tableaux gigantestes avec 50 cases à 0 et 3 cases à 1 mais simplement ajouter des propriétés géographiques (un point xy par exemple) à tes modèles.


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Maks - 19-04-2012

Ouais après je peux toujours modifier la classe, mais le mec a pondu un code mal indenté, pas espacé et peu commenté, bref ça me motive pas trop.

Je cherchais plus une solution technique pour réaliser l'inversement. Je vais me débrouiller avec des tableaux intermédiaires, même si ça m'embête toujours pour le ramasse-miette.


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - niahoo - 19-04-2012

c'est surtout un problème de performances : à chaque exécution tu passeras par ça alors qu'en modifiant ta classe tu règles le problème une fois pour toutes.

Pour l'indentation tu trouves plein de « syntax beautifiers » sur internet, ou alors tu installes Netbeans, tu ouvres ton fichier, tu fais Alt+Maj+F et hop.


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Angelblade - 19-04-2012

C'est un algo de pathfinding Astar?
Je te conseille de regarder le code source et de le modifier pour qu'il suive ton modèle.
Suffit de repérer où il utilise le tableau et de changer quelques trucs à mon avis.


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Maks - 19-04-2012

C'est celui-ci : http://github.com/bgrins/javascript-astar Wink


RE: [Javascript] Inverser les X et Y d'un tableau de façon élégante - Angelblade - 19-04-2012

C'est con j'ai l'algo astar mais je m'en suis pas servi et j'ai pas mit le nez dedans depuis plus d'un an, mais si j'en crois ce que je vois je m'en sers avec y en premier.

Je veux bien te le passer mais je peux trop rien garantir ni t'aider pour ajouter des fonctionnalités qui n'y serait pas.
Ceci dit le code est assez court et un peu commenté