我正在创建一个小游戏,为了生成一个世界,我需要将Room Objects添加到World Object中。我的困境是需要一种特定的方式来添加房间,以便它们都连接起来(即没有对角线或"岛"房间)。图片如下。 (忽略颜色,灰色是空白,颜色是房间)
这样做的最佳方法是什么?
目前我有一些东西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数组顶行的随机列中,因此总会有一些东西可以构建。
答案 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;
}
这将创建一个随机可穿越的房间,其中一个连接墙/空白区域被保持。如果你想确保你没有创建另一个岛",则在新的可遍历区块上运行相同的脚本,直到找到有效的路径。