Esempio n. 1
0
        public Route GetSubRoute(Route route)
        {
            Route sub = new Route();

            sub.Firefighter = route.Firefighter;

            sub.Steps = new List<Room>(route.Steps);
            sub.Steps.RemoveAt(route.Steps.Count - 1);

            sub.Doors = route.Doors;

            Room last = route.Steps[route.Steps.Count - 1];
            Room secondToLast = route.Steps[route.Steps.Count - 2];

            sub.Cost = route.Cost - GetMoveCost(route.Firefighter, secondToLast, last);

            int wallRow = (last.Row + secondToLast.Row) / 2;
            int wallColumn = (last.Column + secondToLast.Column) / 2;

            if(map.Field(wallRow, wallColumn) != null && map.Field(wallRow, wallColumn) is Door)
            {
                sub.Cost -= route.Firefighter.ActionCosts[ActionName.OpenDoors];
                sub.Doors.Remove(map.Field(wallRow, wallColumn) as Door);
            }

            return sub;
        }
Esempio n. 2
0
        private Route CheapestRoute(Firefighter firefigher, Room start, Room end)
        {
            int cost = 1;
            List<Room> steps = new List<Room>();
            List<Door> doors = new List<Door>();

            steps.Add(start);

            //To DO: Znaleźć drogę. Każdy ruch pomiędzy sąsiednimi polami dodać do steps, a jego koszt do cost.

            steps.Add(end);
            //Koniec - przypisanie i zwrócenie wyniku;
            Route route = new Route();
            route.Steps = steps;
            route.Doors = doors;
            route.Cost = cost;
            route.Firefighter = firefigher;

            return route;
        }
Esempio n. 3
0
        public Action GetMoveAction(Route route)
        {
            Action move;

            Firefighter firefighter = route.Firefighter;
            Room destination = route.Steps[route.Steps.Count - 1];

            //if doors
            if (route.Doors.Count > 0)
            {
                move = new Action(ActionName.Move, route.Cost,
                    () => {
                        Jump(firefighter, destination);
                        CloseAllDoors(route.Doors);
                    });
            }
            else
            {
                move = new Action(ActionName.Move, route.Cost,
                    () => { Jump(firefighter, destination); });
            }

            return move;
        }