2011-05-14 59 views
0

嘿,所有,再回來。在地下城發電機上工作,我對自己的進步感到驚訝。然而,我現在仍然有一個離散的房間。我想知道是否有一種方法可以循環訪問數組,並查看是否所有「1」(地磚)都已連接,如果沒有,則如何連接它們。如何查找數組中所有連接的數字?

謝謝!

編輯:數組是隨機填充房間和走廊;下面的代碼:

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(); 
    } 

所以基本上,當我創建這個類的一個對象是一個100x100的陣列充滿走廊和房間的隨機數確定會發生什麼。 (好吧,其中有幾個)但是我的房間沒有重疊的故障安全(safeFall在room())中,我被一個房間卡住了,這個房間不時被觸及。

Example

+0

我們需要更多的上下文和一些代碼。 – 2011-05-14 01:39:15

+0

你能用一個例子來闡述一下嗎? – Rahul 2011-05-14 01:39:44

+1

您可以使用圖形而不是2D數組重構您的數據結構 – Heisenbug 2011-05-14 01:50:57

回答

相關問題