コード例 #1
0
        protected override bool tryAddDetails(Models.DungeonLevel Level, Models.Doorway Entrance, Models.Room room)
        {
            int numberOfExits = RollNumberOfExits(room.Area);

            if (numberOfExits == 0)
            {
                addHiddenExits(Level, room);
            }
            for (int i = 0; i < numberOfExits; i++)
            {
                Doorway exit = new Doorway();
                do
                {
                    exit.SideIn = RollExitSide(Entrance.SideIn);
                    if (exit.SideIn == Side.North || exit.SideIn == Side.South)
                    {
                        exit.Height = 0;
                        exit.Width  = 1;
                        if (exit.SideIn == Side.North)
                        {
                            exit.y = room.getYEdge();
                        }
                        else
                        {
                            exit.y = room.y;
                        }
                        exit.x = DiceBag.getDice().rand.Next(room.x, room.getXEdge());
                    }
                    else
                    {
                        exit.Width  = 0;
                        exit.Height = 1;
                        if (exit.SideIn == Side.East)
                        {
                            exit.x = room.getXEdge();
                        }
                        else
                        {
                            exit.x = room.x;
                        }
                        exit.y = DiceBag.getDice().rand.Next(room.y, room.getYEdge());
                    }
                } while (room.hasDoorAt(exit.x, exit.y) && !FindDoorType(Level, exit));
                room.Doors.Add(exit);
                Level.Add(exit);
            }
            return(true);
        }
コード例 #2
0
        protected override Models.Room GetComponent(Models.Doorway Entrance)
        {
            Models.Room r = new Models.Room(0, 0, 1, 1);
            switch (Models.DiceBag.getDice().d20()) // TABLE V
            {
            case 1:
            case 2:     // 1-2 Square 10' x 10'
                r.Height = 2;
                r.Width  = 2;
                break;

            case 3:
            case 4:     // 3-4 Square 20' x 20'
                r.Height = 4;
                r.Width  = 4;
                break;

            case 5:
            case 6:     // 5-6 Square 30' x 30'
                r.Height = 6;
                r.Width  = 6;
                break;

            case 7:
            case 8:     // 7-8 Square 40' x 40'
                r.Height = 8;
                r.Width  = 8;
                break;

            case 9:
            case 10:     // 9-10 Rectangle 10' x 20'
                r.Height = 2;
                r.Width  = 4;
                break;

            case 11:
            case 12:
            case 13:     // 11-13 Rectangle 20' x 30'
                r.Height = 4;
                r.Width  = 6;
                break;

            case 14:
            case 15:     // 14-15 Rectangle 20' x 40'
                r.Height = 4;
                r.Width  = 8;
                break;

            case 16:
            case 17:     // 116-17 Rectangle 30' x 40'
                r.Height = 6;
                r.Width  = 8;
                break;

            case 18:
            case 19:
            case 20:     // Unusual shape and size
                // TODO implement handling for unusual shapes.
                r.Height = 6;
                r.Width  = 4;
                break;
            }
            return(r);
        }