Exemple #1
0
        /// <summary>
        /// Constructor voor Hotel
        /// </summary>
        public Hotel()
        {
            //maak nieuwe lijsten aan, maak een queue en zet de timer aan
            Roomlist     = new List <AbstractRoom>();
            Employees    = new List <Maid>();
            GuestList    = new List <Guest>();
            _dirtyroom   = new Queue <AbstractRoom>();
            roomFactory  = new RoomFactory();
            humanFactory = new HumanFactory();
            SetTimer();


            //open de streamreader
            using (StreamReader r =
                       new StreamReader(Path.Combine(Environment.CurrentDirectory, "..", "..", "..", "..", "HotelLayout/Hotel.layout")))
            {
                //String met alle data uit de layout file
                string json = r.ReadToEnd();

                //desirialiseer alle string json informatie naar een jsonObject die toegevoegd kunnen worden aan roomlist
                Jsonobjectlist = JsonConvert.DeserializeObject <List <JsonObject> >(json);

                //zet elke json object om naar de juiste kamer en voeg hem toe aan roomlist
                foreach (JsonObject room in Jsonobjectlist)
                {
                    switch (room.AreaType)
                    {
                    case "Cinema":
                        Roomlist.Add(roomFactory.CreateCinema(room.AreaType, room.Dimension, room.Position, room.Id));
                        break;

                    case "Restaurant":
                        Roomlist.Add(roomFactory.CreateRestaurant(room.Capacity, room.AreaType, room.Position, room.Dimension, room.Id));
                        break;

                    case "Room":
                        Roomlist.Add(roomFactory.CreateBedroom(room.Classification, room.AreaType, room.Position, room.Dimension, room.Id));
                        break;

                    case "Fitness":
                        Roomlist.Add(roomFactory.CreateGym(room.AreaType, room.Dimension, room.Position, room.Id));
                        break;
                    }
                }
            }

            //maak een nieuwe receptie en voeg hem toe aan roomlist
            reception = roomFactory.CreateReception(Roomlist);
            Roomlist.Add(reception);

            //voeg 2 schoonmaker toe aan de Employees lijst
            Employees.Add((Maid)humanFactory.CreateMaid(reception));
            Employees.Add((Maid)humanFactory.CreateMaid(reception));

            //een for each om te bepalen welke posities al in genomen zijn
            foreach (AbstractRoom r in Roomlist)
            {
                //hou max X bij
                if (r.PositionX > maxX)
                {
                    maxX = r.PositionX;
                }

                //hou max Y bij
                if (r.PositionY > maxY)
                {
                    maxY = r.PositionY;
                }


                //als de dimensie meer dan 1 is voeg dan alle posities van die kamer toe aan positions
                if (r.DimensionX > 1 || r.DimensionY > 1)
                {
                    for (int x = 0; x < r.DimensionX; x++)
                    {
                        for (int y = 0; y < r.DimensionY; y++)
                        {
                            positions.Add(new Point(r.PositionX + x, r.PositionY + y));
                        }
                    }
                }
                else // als een kamer 1 X 1 is voeg hem dan toe aan positions lijst
                {
                    positions.Add(new Point(r.PositionX, r.PositionY));
                }
            }

            //maak een lift aan
            Elevator elevator = (Elevator)roomFactory.CreateElevator("Elevator", 1, 1, maxX + 1, 0);

            //voeg lift en trap toe aan roomlist en zijn positie aan de positions lijst
            for (int i = 0; i <= maxY; i++)
            {
                //voeg de trap en zijn positie toe
                Roomlist.Add(roomFactory.CreateStairwell("Stairwell", 1, 1, 0, i));
                positions.Add(new Point(0, i));

                //maak een nieuwe shaft geef hem een refference naar de lift en voeg hem toe aan room list
                ElevatorShaft tempShaft = (ElevatorShaft)roomFactory.CreateElevatorshaft("Elevatorshaft", 1, 1, maxX + 1, i);
                tempShaft.setElevator(ref elevator);
                Roomlist.Add(tempShaft);

                //zet de lift op de positie van lift schaft
                if (i == 0)
                {
                    elevator.currentPosition = tempShaft;
                }

                //voeg de positie aan positions lijst
                positions.Add(new Point(maxX + 1, i));
            }



            //voeg hallway toe om lege ruimtes op te vullen
            for (int x = 0; x <= maxX; x++)
            {
                for (int y = 0; y <= maxY; y++)
                {
                    //als de positie niet gevuld is maak dan een hallway met die positie
                    if (!positions.Contains(new Point(x, y)))
                    {
                        Roomlist.Add(roomFactory.CreateHallway("Hallway", 1, 1, x, y));
                    }
                }
            }

            //buren toe voegen
            foreach (AbstractRoom r in Roomlist)
            {
                //als het een trap of een lift schaft is
                if (r.AreaType == "Stairwell" || r.AreaType == "Elevatorshaft")
                {
                    //kijk of er boven buren zijn
                    if (Roomlist.Any(x => x.PositionY == r.PositionY + 1 && x.PositionX == r.PositionX))
                    {
                        //selecteer de boven buur
                        var linq = (from a in Roomlist
                                    where (r.PositionY + 1) == a.PositionY && r.PositionX == a.PositionX
                                    select a).ToList();

                        //maak er een Abstractroom van en voeg hem toe aan buren
                        AbstractRoom result = linq.First();
                        r.AddNeighbour(ref result, 1);
                    }

                    //kijk of er onder buren zijn
                    if (Roomlist.Any(x => x.PositionY == r.PositionY - 1 && x.PositionX == r.PositionX))
                    {
                        //selecteer de onder buur
                        var linq = (from a in Roomlist
                                    where (r.PositionY - 1) == a.PositionY && r.PositionX == a.PositionX
                                    select a).ToList();

                        //maak er een Abstractroom van en voeg hem toe aan buren
                        AbstractRoom result = linq.First();
                        r.AddNeighbour(ref result, 1);
                    }
                }

                //kijk of er rechter buren zijn
                if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == r.PositionX + r.DimensionX))
                {
                    //selecteer rechter buur zolang het geen lift is
                    var linq = (from a in Roomlist
                                where r.PositionY == a.PositionY && (r.PositionX + r.DimensionX) == a.PositionX &&
                                a.AreaType != "Elevator" select a).ToList();

                    //maak er een Abstractroom van en voeg hem toe aan buren
                    AbstractRoom result = linq.First();
                    r.AddNeighbour(ref result, r.DimensionX);
                }
                else     //als er geen rechter buur is
                {
                    //kijk naar rechts tot je iets vindt of de maxX is bereikt
                    for (int i = r.PositionX + 1; i <= maxX + 1; i++)
                    {
                        //als er een kamer is gevonden die deze positie heeft
                        if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == i))
                        {
                            //selecteer rechter buur
                            var linq = (from a in Roomlist
                                        where r.PositionY == a.PositionY && i == a.PositionX
                                        select a).ToList();

                            //maak er een Abstractroom van en voeg hem toe aan buren
                            AbstractRoom result = linq.First();
                            r.AddNeighbour(ref result, 1);

                            break;
                        }
                    }
                }


                //kijk of er linker buren zijn
                if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == r.PositionX - 1))
                {
                    //selecteer linker buur
                    var linq = (from a in Roomlist
                                where r.PositionY == a.PositionY && (r.PositionX - 1) == a.PositionX
                                select a).ToList();

                    //maak er een Abstractroom van en voeg hem toe aan buren
                    AbstractRoom result = linq.First();
                    r.AddNeighbour(ref result, 1);
                }
                else     //als er geen linker buur is
                {
                    //kijk naar links tot je iets vindt of het begin is bereikt
                    for (int i = r.PositionX - 1; i >= 0; i--)
                    {
                        //als er een kamer is gevonden die deze positie heeft
                        if (Roomlist.Any(x => x.PositionY == r.PositionY && x.PositionX == i))
                        {
                            //selecteer linker buur
                            var linq = (from a in Roomlist
                                        where r.PositionY == a.PositionY && i == a.PositionX
                                        select a).ToList();

                            //maak er een Abstractroom van en voeg hem toe aan buren
                            AbstractRoom result = linq.First();
                            r.AddNeighbour(ref result, 1);

                            break;
                        }
                    }
                }
            }

            //voeg lift toe aan roomlist
            Roomlist.Add(elevator);
        }