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); } } } }