房间生成中的死胡同识别,统一

问题描述 投票:0回答:1

所以我得到了这一代房间,不同的房间通过走廊相连。 现在我希望玩家在房间的死胡同之一重生。为了检查死胡同,我只需扫描走廊的每个方向并将计数存储在变量中。如果这个变量等于1,房间应该是一个死胡同。问题是,并不是所有的死胡同都被识别出来,有时,即使是普通的房间也被列为死胡同。 这是示例生成的图片。粉色中心是公认的死胡同。绿点是房间中心,橙色点是围绕中心检查的走廊。仍然存在绿色死胡同。这是重要的代码,基本上只是循环所有房间和走廊位置,其中位置保存在哈希集中

        int roomCorridorCount = 0;
    HashSet<Vector2Int> corridors = ConnectRooms(roomCenters);
    HashSet<Vector2Int> deadEnds = new HashSet<Vector2Int>();
    HashSet<Vector2Int> nearRoomCenter = new HashSet<Vector2Int>();
    HashSet<Vector2Int> oneCorridorRooms = new HashSet<Vector2Int>();
    foreach (var room in newRoomCenters)
    {
        foreach (var corridor in corridors)
        {
            if(new Vector2Int(room.x + 1, room.y) == corridor)
            {
                roomCorridorCount++;
                nearRoomCenter.Add(new Vector2Int(room.x + 1, room.y));
            }   
            if (new Vector2Int(room.x - 1, room.y) == corridor)
            {
                roomCorridorCount++;
                nearRoomCenter.Add(new Vector2Int(room.x - 1, room.y));
            }
            if(new Vector2Int(room.x, room.y + 1) == corridor)
            {
                roomCorridorCount++;
                nearRoomCenter.Add(new Vector2Int(room.x, room.y + 1));
            }
            if(new Vector2Int(room.x, room.y - 1) == corridor)
            {
                roomCorridorCount++;
                nearRoomCenter.Add(new Vector2Int(room.x, room.y - 1));
            }           
        }
        if (roomCorridorCount == 1)
        {
            deadEnds.Add(room);
            oneCorridorRooms.Add(room);
        }
    }
    tilemapVisualizer.PaintTiles(corridors, floorMap, white);
    tilemapVisualizer.PaintTiles(newRoomCenters, floorMap, green);
    tilemapVisualizer.PaintTiles(nearRoomCenter, floorMap, orange);
    tilemapVisualizer.PaintTiles(oneCorridorRooms, floorMap, pink);
    floor.UnionWith(corridors);
    var playerSpawnRoom = deadEnds.ElementAt(Random.Range(0, deadEnds.Count));
    Debug.Log(deadEnds.Count);
c# unity-game-engine
1个回答
1
投票

这是变量 uff 缺少重置。对于@derHugo,我只想在所有死胡同中拥有两个房间,所以不得到每个房间是完全可以的

© www.soinside.com 2019 - 2024. All rights reserved.