2010-04-26 2 views
0

J'ai la taille de la grille de taille 8x8, total de 64 tuiles. J'utilise cette grille pour implémenter des algorithmes de recherche Java tels que BFS et DFS.Comment doubler la taille de la grille 8x8 tout en gardant la position relative de certaines tuiles intactes?

La grille a donné des tuiles interdites (ce qui signifie qu'elles ne peuvent pas être traversées ou être voisines d'une autre tuile) ainsi qu'une tuile But et une tuile Début. par exemple, les tuiles 19,20,21,22 and 35, 52 sont interdites et 14 an 43 sont les tuiles Goal et start lorsque le programme s'exécute.

Ma question est, comment puis-je doubler la taille de la grille, à 16x16 tout en gardant le Relative position of forbidden tiles ainsi que le Relative position of start and goal Tiles intact? En déclarant simplement un tableau de grid[16][16], les tuiles interdites et les tuiles But et Début ne sont plus dans des positions relatives car elles étaient dans la taille de la grille 8x8.

Sur le papier je sais que je peux faire ceci en ajoutant 4 rows and columns to all sides mais en termes de codage je ne sais pas comment le faire fonctionner? Quelqu'un peut-il s'il vous plaît donner des conseils?

+0

ce devoir? –

+0

Il est très difficile de savoir exactement ce que vous voulez. Pourriez-vous fournir un dessin avant et après peut-être? – NomeN

Répondre

0

Les tableaux ne sont pas redimensionnables dans Java, ce que vous devez faire est d'allouer un nouveau tableau avec la dimension requise et de copier vos données.

Par exemple, si vous voulez l'ancienne carte d'être au centre de la nouvelle:

Tile[][] newMap = new Tile[16][16]; 

for (int i=0; i<8; i++) 
    for (int j=0; j<8; j++) 
    newMap[i+4][j+4] = oldMap[i][j]; 

Mais vous auriez encore initialiser les autres tuiles à autre chose.

+0

oui ma grille actuelle est déclarée en utilisant un tableau à deux dimensions. – ke3pup

+0

Merci d'avoir essayé d'aider Guillaume. Ce n'est pas que je veuille que l'ancienne carte soit au centre de la nouvelle carte. Je suis plus préoccupé par la position relative des carreaux en passant de la taille 8x8 à la taille 16x16. Par exemple, si la taille de grille est 8x8, si la tuile Objectif est 19 et la tuile Début 44, la tuile Objectif dans la nouvelle grille 16x16 devrait être 103 et la tuile Début 152 (conforme à l'idée d'ajouter 4 lignes et colonnes de chaque côté de la grille). – ke3pup

+0

Je pense que vous rendez cela plus compliqué qu'il ne devrait l'être en utilisant un schéma de numérotation de tuiles. Vous serez mieux servi en nommant vos tuiles en fonction de leurs coordonnées 2d. – Guillaume

0

Quelque chose de simple pourrait être de mettre l'élément à (i, j) dans l'ancienne grille à (2i, 2j) dans le nouveau ... les positions relatives des tuiles seraient conservés ... Est-

+0

Comment cela peut-il être? Dans la taille de grille d'origine 8x8, par exemple, la tuile 19 est à i (2) j (2) (matrice basée sur 0). Comment 2i, 2j peut-il être relatif à celui de la grille 16x16? Pouvez-vous être plus détaillé s'il vous plaît? Je suis désolé je ne le vois pas. – ke3pup

+0

Je ne suis pas sûr de comprendre votre question.ce que je propose est une solution pour avoir une échelle de la grille en insérant des éléments vierges ... Mais en lisant votre question, peut-être que ce n'est pas ce que vous voulez (la position relative signifie "A est à droite/gauche de B "ou" A est effondré à droite de B ", dans le second cas ma réponse ne fonctionne pas). – Vinze

+0

Je suis totalement confus moi-même. Je fais une pause pour y réfléchir avant de vous rendre plus confus. Merci d'avoir essayé d'aider. Très appréciée. – ke3pup

Questions connexes