二维阵列检查元素

时间:2017-01-21 01:37:41

标签: java arrays sorting

我正在创建一个小游戏,为了生成一个世界,我需要将Room Objects添加到World Object中。我的困境是需要一种特定的方式来添加房间,以便它们都连接起来(即没有对角线或"岛"房间)。图片如下。 (忽略颜色,灰色是空白,颜色是房间)

Ignore Colors

这样做的最佳方法是什么?

目前我有一些东西
if (this.board[posx-1][posy].isOcc())
    valid == true;
if (this.board[posx][posy-1].isOcc())
    valid == true;
if (this.board[posx][posy+1].isOcc())
    valid == true;
if (this.board[posx+1][posy].isOcc())
    valid == true;

如果有效,则表示可以将房间放置在那里。 如果这成为一个问题是在边缘,它超出界限。

我有一个初始基础,它会将一个房间放在2D数组顶行的随机列中,因此总会有一些东西可以构建。

1 个答案:

答案 0 :(得分:1)

设置你的房间"引用其周围节点以获得可接受通道的对象 - 即:

class Room {
    bool isTraversable = false;
    Room rooms = new Room[4]
}

然后,将地图生成器切换为2遍,而不是仅仅一个。所以,运行你的第一代(这可能会导致无效的设置),然后对此进行第二次传递,简而言之,检查是否有某种有效的空间进入。如果没有,请创建一个有效的房间。

所以,这个的基本版本是;

hasValidPath = false;
foreach (Room r in rooms) {
    if (r.isTraversable) {
        hasValidPath = true;
        break;
    }
}

if (!hasValidPath) {
    rooms[Mathf.Random(0,3)].isTraversable = true;
}

这将创建一个随机可穿越的房间,其中一个连接墙/空白区域被保持。如果你想确保你没有创建另一个岛",则在新的可遍历区块上运行相同的脚本,直到找到有效的路径。