Example #1
0
        private void updateCosts( Point pos, CanPass canPass )
        {
            resetCosts();
            // ingen spelare får gå utanför kartan:
            if (!validIndex(pos.X, pos.Y))
                throw new ArgumentException("invalid start position");

            costs[pos.X, pos.Y] = 0;
            List<Point> position_queue = new List<Point>{ pos };

            while (position_queue.Count != 0)
            {
                // ta bort första elementet i kön och lägg det i current
                Point current = position_queue[0];
                position_queue.RemoveAt(0);

                int new_cost = costs[current.X,current.Y] + 1;

                foreach (Point p in getNeighbourPositions(current))
                {
                    // om en granne har en högre kostnad än vad vi vill sätta så ändrar vi den
                    if ( validIndex(p.X,p.Y) && canPass.check(p) && new_cost < costs[p.X,p.Y] )
                    {
                        // ändra kostnad och lägg över nya koordinaten längst bak i kön
                        costs[p.X, p.Y] = new_cost;
                        position_queue.Add(p);
                    }
                }
            }
        }