2016-02-01 91 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