2015-09-06 34 views
0

我正在制作视频游戏,玩家可以进入和退出房间。他们也可能进入房间或​​分房间的房间。经过所有碰撞之后,我想出了五个Rectangle变量/数组。Java - Fancy Two Dimesional Arrays

static Rectangle exitDoor[] = new Rectangle[1]; 
static Rectangle subExitDoor[] = new Rectangle[1]; 
static Rectangle roomDoor[] = new Rectangle[1]; 
static Rectangle roomLadder[] = new Rectangle[1]; 
static Rectangle roomInnerLadder[] = new Rectangle[1]; 

每个房间可以有多个内部。我想将所有这些数组放在一个数组中,创建它们的两个版本。我的意思是,如果最后两个二维数组被命名为“房间”而不是房间[0] [0]和房间[1] [0](第二个零是exitDoor数组)将是两个不同的值。

我已经尝试做下面的事情,但它所做的只是做与第一组代码相同的事情。

Rectangle[][] roomCat = new Rectangle[][] { exitDoor, subExitDoor, roomDoor, roomLadder, roomInnerLadder }; 

我不找人来告诉我如何使二维数组,我可以准备人做到这一点。我需要有人告诉我如何让他们进入下一步。

感谢, 橡树

+0

它听起来并不像你想要array *一样,而是一个'Room'类,它包含这些'Rectangle's作为'Door's代替。 – Makoto

+0

比我在班上的数组做什么? – Oak

+0

这是一个完全不同的设计。我不认为阵列会让你受益;相反,你会想创建全新的抽象来表示这一点。索引到一个二维数组可以完成几乎相同的事情。 – Makoto

回答

1

嗯,我不明白你想用二维数组做什么。实际上,二维数组没有什么特别之处,它们只是数组的数组,如果你知道我的意思。

但是,如果我们回头看看你想要做什么。这其实不是很复杂的任务。

其实你试图做的是在数学和艺术等很多领域都有一个非常有趣的概念,这就是所谓的自我参照。你可以在埃舍尔的绘画和巴赫的锥形中看到自我引用。看看下面的课程。

class Room { 

    Room outerRoom; 
    Room innerRoom; 

    Room(Room outerRoom, Room innerRoom) { 
     this.outerRoom = outerRoom; 
     this.innerRoom = innerRoom; 
    } 

    // goes to outerRoom 
    Room exit() { 
     return outerRoom; 
    } 

    // goes to innerRoom 
    Room enter() { 
     return innerRoom; 
    } 

} 

这是您游戏中房间的实现。正如你所提到的,房间内可能还有另一个房间,因此房间外面可能会有另一个房间。所以如果我们想要退出房间,我们要去outerRoom。这个实现的便利之处在于outerRoom也是一个房间。因此它也包含内部和外部房间。

你可能认为这个课程是一个套娃娃,然而我们实际上实施的是一个基本的链接列表。您可以在互联网上查看它,并且您可以在制作游戏时使用它,但似乎您正在寻找更多的东西。

你想在一个房间内有很多房间。你要找的是一棵树,我的朋友。看看下面的课程:

class Room { 

    Room outerRoom; 
    Room[] innerRooms; 

    // creates a room with n inner rooms 
    Room (Room outerRoom, int n) { 
     this.outerRoom = outerRoom; 
     this.innerRooms = new Room[0]; 
    } 

    // sets nth room to innerRoom 
    void addRoom(int n, Room innerRoom) { 
     innerRooms[n] = innerRoom; 
    } 

    // goes to nth room 
    Room getRoom(int n) { 
     return innerRooms[n]; 
    } 

} 

这是您游戏中房间的另一个实现。这次我们没有内室,而是内室。因此,您可以在房间中拥有尽可能多的房间,但是您只能在室外拥有一个房间,就像树的节点一样。

因此,我建议您查看互联网上的链表和树来理解这种自引用结构的概念。

还要注意,如果没有任何房间外,你可以让它空,如果你不希望有任何的内室,你可以的内室的数量设置为0

希望它有助于 :)。

-3

您没有使用阵列创建房间它只是多个Rectangle类及其价值 而是使用二维数组与循环或多维数组插入的矩形。