我正在创建一个视频游戏,玩家可以进入和退出房间。他们还可以进入房间内的房间或子房间。经过所有的碰撞后,我想出了五个矩形变量/数组。
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];
每个房间内可以有多个。我想将所有这些数组放入一个创建它们两个版本的数组中。我的意思是,如果最后一个二维数组被命名为“room”,则 room[0][0] 和 room[1][0] (第二个零是 exitDoor 数组)将是两个不同的值。
我尝试执行以下操作,但它所做的只是与第一组代码执行相同的操作。
Rectangle[][] roomCat = new Rectangle[][] { exitDoor, subExitDoor, roomDoor, roomLadder, roomInnerLadder };
我不是在找人告诉我如何制作二维数组,我已经可以做到了。我需要有人告诉我如何带领他们进行下一步。
谢谢, 橡木
最佳答案
嗯,我不明白你想用二维数组做什么。实际上二维数组没有什么特别的,它们只是数组的数组,如果你明白我的意思的话。
但是,如果我们回顾一下您最初想要做什么。这实际上并不是非常复杂的任务。
实际上你想做的是在数学和艺术等许多领域中一个非常有趣的概念,这就是所谓的自引用。你可以在埃舍尔的画作和巴赫的柯南中看到 self 参照。看看下面的类(class)。
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 也是一个 Room。因此它也包含内部和外部房间。
你可能认为这个类是一个俄罗斯套娃,但我们实际上实现的是一个基本的链表。您可以在互联网上查找它,并且可以在制作游戏时使用它,但似乎您正在寻找更多东西。
您希望一个房间内有多个房间。你要找的是一棵树,我的 friend 。看下面的类:
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。
希望对您有所帮助:)。
关于Java - 奇特的二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32427878/