Java - 奇特的二维数组

标签 java 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];

每个房间内可以有多个。我想将所有这些数组放入一个创建它们两个版本的数组中。我的意思是,如果最后一个二维数组被命名为“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/

相关文章:

c++ - 在函数内修改多维数组

java - 从 sdcard 运行 FFmpeg 可执行文件

java - 基于逻辑构造对象类型——这可以做到吗?

jquery - 解析数组中的JSON数组并使用键值

在 c 中创建一个 FIFO 队列

javascript - parseFloat() 没有解析我的数组中的所有字符串。 JavaScript

java - 如何在java中硬拷贝List<List<>>?

java - 当我将方法的结果保存在新变量中时会更快吗?

java - 添加jsp文件到ear

java - 在 2D JButton 阵列上添加图像