2016-02-01 54 views
1

我剛開始使用java,所以如果我混淆了事情,請耐心等待。如何比較來自多個目標的變量值

無論如何,我想創建一個包含4個不同房間的關卡。我已經完成了,所以每個房間都是用主要方法創建的獨立對象。

然後我想要做的是將每個房間放置在一定大小的水平面內,如果房間與另一個房間重疊,它將返回false。每個房間基本上都是100x100像素的塊。

我已經完成了這樣的工作,每個房間對象通過將(x,y)線分配給房間類中定義的2個變量來存儲它的位置。

但是我放置第二個房間時遇到了麻煩。如何檢查我想放置的第二個房間是否與其他房間不重疊?我的目的是檢查所有房間對象中的所有(x,y)變量值,如果它們中的任何一個重疊,它將返回false。但是我不知道如何引用所有這些變量,我怎樣才能檢查每個房間對象中的變量?

非常感謝您的幫助!

+0

考慮建模一個*房間集合*。那麼不相交測試就是* collection *的一個函數。每個房間將保持其長度和寬度(並提供返回這些功能的功能),但不*在空間中的位置。這又是該集合的一個屬性。 – Bathsheba

+0

創建一個ArrayList並將其調用級別,可以將空間添加到級別ArrayList並跟蹤它們。 ArrayList level = new ArrayList(); String room1 [] [] = new String [100] [100]; String room2 [] [] = new String [100] [100]; level.add(room1); level.add(room2); – Arsaceus

回答

0

將分配給某個地點的房間放置在ArrayList中,以便您循環並比較參數。我想一個房間不僅有xy座標,還有lengthwidth

// using a list of rooms that are placed on level 
List<Room> assignedRooms = new ArrayList<Room>(); 
// create a new room (x, y, width, height) 
Room newRoom = new Room(0, 0, 100, 100); 
assignedRooms.add(newRoom); 
// create further rooms 

爲了找出一個房間是否與另外一個或沒有,你最好遍歷剩下的房間,也就是你已經放置在整個區域內,並檢查那些重疊如果xy座標新增加的房間與任何其他房間相沖突。

for (int i = 0; i < assignedRooms.size(); i++) { 
    Room assignedRoom = assignedRooms.get(i); 
    if (assignedRoom.x < roomToAdd.x && assignedRoom.x + assignedRoom.width > roomToAdd.x) 
     // overlap 
     return false; 
    else if (assignedRoom.y < roomToAdd.y && assignedRoom.y + assignedRoom.height > roomToAdd.y) 
     // overlap 
     return false; 
} 
return true; 
+0

我不同意,該職位應該是*收藏*的財產,而不是房間。 – Bathsheba

+0

這是該問題的可能實現,但問題僅僅是如何檢查所有不同對象的變量。我同意你的方法更有效,但是再次不是OP尋找的解決方案/答案。 – LordAnomander

+0

感謝answear,所以基本上你所做的是每次將房間放置在水平面上而不是將位置存儲在房間對象中時,將位置放置在稍後通過添加第二個和第三個房間時循環的數組中。 – Carl