我想要建造一个由相连的房间组成的综合体。每个房间旁边都可以有1-4个房间。

我的算法产生了这个由连接的房间组成的综合体。
public class Room
{
private Room top = null; //Connected rooms
private Room right = null;
private Room bottom = null;
private Room left = null;
private Vector2 roomOffset; //Position of the room
}在创建一个新房间之前,我想检查一下是否已经有一个房间位于新房间的位置。有没有比检查所有房间和检查这个位置是否与新房间的位置相匹配的更简单的方法?
发布于 2014-11-09 18:03:04
我知道你可能已经确定了你的解决方案,并且有很好的理由,但我将离开这里,我将如何做到这一点:
假设房间不仅仅是一个提供迷宫的空空间(可以容纳敌人、宝藏等)。我会创建一个Room数组rooms[,] (否则bool[,]就足够了)。
我有一个应用程序级常量(或用户选项),最大允许的迷宫尺寸,我会相应地创建我的数组:rooms[MAXDIMENSION, MAXDIMENSION]。
然后,我的算法将通过分配房间实例来设置数组中的房间。第一维代表北/南(行)导线,第二维代表东/西(列)导线。
举个例子:
rooms = new [3,2] { { new Room(), new Room() }, {null, new Room()} , {new Room(), new Room() } };内布null单元或阵列范围界限将意味着房间没有路径在这个方向。在该示例中,如果起始节点为[0,0],则可能的路径为东、西/南、北/南、北/西、东。
请注意,来自任何给定空间的可能遍历不会包含在Room实例中,因为它不再需要;您可以在呈现迷宫时动态生成该信息,只需检查rooms[x, y]邻居。
这种方法的一个有趣之处是,它也可以扩展到迷宫级。room[,][MAXLEVELS],其中最后一个维度将表示级别的数量。它们都共享相同的基本网格,动态地检查上下遍历也同样容易。
只是一个主意..。
发布于 2014-11-09 16:58:35
如果您在新建房间之前已经确定了新房间的位置,并且考虑到您的房间在列表中或类似的地方,那么您可以使用类似于以下内容的内容:
var existingRoom = (from room in rooms where room.roomOffset = newRoomOffset select room).Any();如果这个返回true,那么该位置已经有一个房间。
如果您不想使用linq,您可以创建一个多维数组,其中每个元素对应一个可能的房间位置,并检查数组中是否存在一个房间。
https://stackoverflow.com/questions/26830463
复制相似问题