2017-09-06 3 views
0

J'ai une grille bidimensionnelle dans laquelle toutes les mosaïques sont définies par deux coordonnées x et y. Je stocke les tuiles dans un tableau comme celui-ci var tiles = [];. Chaque tuile est un objet avec un x et y propriété: Je veux savoir quelles tuiles sont adjacentesRecherche de mosaïques adjacentes dans une grille bidimensionnelle

Tile = { 
    x: ..., 
    y: ... 
} 

pour le dessin (toile) à l'autre. Je pourrais le faire en faisant une boucle sur chaque élément et vérifier s'il est adjacent. Comme cela prendrait nn nombre d'accès, je ne pense pas que ce soit la bonne façon de le faire. Je pense qu'il y aurait un algorithme plus efficace. Je pensais aussi que peut-être stocker les données d'une manière différente aiderait, mais encore une fois, je ne sais pas comment.

+0

Eh bien, d'un point de vue générique cela ressemble à un problème, vous pouvez enquêter sur en apprenant la notation O grand et comment il se rapporte aux types de stockage de données en informatique. Cela dit, il semble que vous allez devoir le faire comme vous le pensez. –

Répondre

2

Vous avez 2 façons de créer une grille:

  • L'utilisation d'un 2 dimensions qui doit être la plus facile chose pour une grille
  • adjacente magasin Carrelage d'une tuile dedans avec quelque chose comme ça:

    var tile0 = { 
        x:0, y:1 
    } 
    
    var tile1 = { 
        x:1,y:1, tileLeft : tile0 
    } 
    

Il peut être utile si vous voulez créer pentagonale ou hexagonal ... grille, créez votre grille automatiquement ofcourse avec af ou boucle.

EDIT

Un tableau à deux dimensions est tout simplement un tableau de tableau

var arr = new Array() 
for(var i = 0 ; i < 10 ; i++){ 
    arr[i] = new Array() 
} 

vous pouvez maintenant définir la valeur comme dans une grille, par exemple:

arr[0][2] = {x:2,y:2} //It's a bit useless since indexes can be use for x and y 

Dans ce cas, j'ai 10 rangée stockée dans un tableau ainsi:

arr[10][0] 

Retournera l'erreur suivante: Uncaught TypeError: Impossible de définir la propriété « 2 » undefined, parce que l'indice de ARR ne définissent seulement entre 0 et 9.

+0

Pouvez-vous expliquer comment un tableau bidimensionnel fonctionnerait et serait utilisé ici? – BBotMerlin

+0

J'ai édité ma réponse :) – Nolyurn

+0

Mon problème est que la grille est infinie et seulement quelques tuiles sont définies. Donc la première méthode me semble plus appropriée. Mais puisque je devrais également enregistrer et charger les données, il semble un peu difficile à réaliser. – BBotMerlin

0

Avec votre construction de données, je ne peux pas voir un moyen de vérifier toutes les tuiles adjacentes sans accéder à chaque tuile.

La construction de données de grille bidimensionnelle «éprouvée» serait ... un réseau bidimensionnel simple. Ensuite, vous pouvez accéder aux tuiles directement par leurs coordonnées.

+0

Pouvez-vous expliquer comment un tableau bidimensionnel fonctionnerait et serait utilisé ici? – BBotMerlin