2011-05-14 3 views
0

Salut à tous, de retour. Travailler sur un générateur de donjon et je suis en train de me surprendre avec les progrès. Pourtant, j'ai toujours une pièce qui traîne de temps en temps. Je me demandais s'il y avait un moyen de faire une boucle dans un tableau et de voir si tous les '1' (les carreaux de sol) sont connectés, et sinon, comment les connecter.Comment trouver tous les numéros connectés dans un tableau?

Merci!

EDIT: Le tableau est rempli aléatoirement de pièces et de couloirs; voici le code:

import java.util.Random; 
public class Level 
{ 
    Random random = new Random(); 
    int[][] A = new int[100][100]; 
    int minimum = 3; 
    int maximum = 7; 
    int xFeature = 0; 
    int yFeature = 0; 
private void feature() 
    { 
    int i = 0; 
    while(i>=0) 
    { 
     xFeature = random.nextInt(100-1) + 1; 
     yFeature = random.nextInt(100-1) + 1; 
     if(A[xFeature][yFeature]==1)//||A[xFeature++][yFeature]==1||A[xFeature][yFeature--]==1||A[xFeature][yFeature++]==1) 
     break; 
     i++; 
    } 
    } 


    private void room() 
    { 
    int safeFall = 0; 
    int xCoPLUS = minimum + (int)(Math.random()*minimum); 
    int yCoPLUS = minimum + (int)(Math.random()*minimum); 
    if(yCoPLUS >= xCoPLUS) 
    { 
     for(int across = xFeature; across < xFeature+xCoPLUS+2; across++) 
     { 
     for(int vert = yFeature; vert < yFeature+yCoPLUS+1; vert++) 
     { 
      if(A[vert][across] == 0) 
      safeFall++; 
      else 
      break; 
     } 
     } 
    } 
    if(yCoPLUS < xCoPLUS) 
    { 
     for(int across = xFeature; across < xFeature+xCoPLUS+1; across++) 
     { 
     for(int vert = yFeature; vert < yFeature+yCoPLUS+2; vert++) 
     { 
      if(A[vert][across] == 0) 
      safeFall++; 
      else 
      break; 
     } 
     } 
    } 
    if((safeFall== (xCoPLUS+1) * (yCoPLUS+2)) || ((safeFall== (xCoPLUS+2) * (yCoPLUS+1)))) 
    { 
     for(int across = xFeature; across < xFeature+xCoPLUS; across++) 
     { 
     for(int vert = yFeature; vert < yFeature+yCoPLUS; vert++) 
     { 
      A[vert][across] = 1; 
     } 
     } 
    } 
    } 
private void corridor() 
    { 

    int xCoONE = xFeature; 
    int yCoONE = yFeature; 
    int xCoTWO = random.nextInt(10)+10; 
    int yCoTWO = random.nextInt(10)+10; 
    while(xCoONE > xCoTWO) 
    { 
     A[xCoONE][yCoONE] = 1; 
     xCoONE--; 
    } 
    while(xCoONE < xCoTWO) 
    { 
     A[xCoONE][yCoONE] = 1; 
     xCoONE++; 
    } 
    while(yCoONE > yCoTWO) 
    { 
     A[xCoONE][yCoONE] = 1; 
     yCoONE--; 
    } 
    while(yCoONE < yCoTWO) 
    { 
     A[xCoONE][yCoONE] = 1; 
     yCoONE++; 
    } 
} 
public Level() 
    { 
    firstroom(); 
    for(int i = 0; i < 500; i++) 
    { 
     int x = random.nextInt(50); 
     feature(); 
     if(x > 1) 
     room(); 
     else 
     corridor(); 
    } 
    troubleShoot(); 
    } 

Donc, fondamentalement, ce qui se passe lorsque je crée un objet de cette classe est qu'un tableau 100x100 est rempli avec des couloirs et des salles déterminées par un nombre aléatoire. (Bien, quelques-uns d'entre eux) Mais avec comment j'ai ma chambre sans chevauchement failsafe (safeFall dans la chambre()), je suis coincé avec une pièce qui est un titre hors de portée de temps en temps.

Example

+0

Nous aurons besoin de plus de contexte et de code. –

+0

Pouvez-vous élaborer avec un exemple? – Rahul

+1

Vous pouvez refactoriser vos structures de données en utilisant un graphique au lieu d'un tableau 2D – Heisenbug

Répondre

Questions connexes