public void ComputeDijkstra() { var q = new Queue <IntCouple>(); foreach (DijkstraStart start in _startPos) { _pathMap[start.X, start.Y] = start.Val; q.Enqueue(new IntCouple { X = start.X, Y = start.Y }); } while (q.Count != 0) { IntCouple pos = q.Dequeue(); float val = _pathMap[pos.X, pos.Y]; for (int i = -1; i < 2; i++) { for (int j = -1; j < 2; j++) { if (pos.X + i >= 0 && pos.X + i < Map.MAP_WIDTH && pos.Y + j >= 0 && pos.Y + j < Map.MAP_HEIGHT && _source.TCODMap.isWalkable(pos.X + i, pos.Y + j) && _pathMap[pos.X + i, pos.Y + j] > val + ((i == 0 || j == 0)?1:Diag)) { _pathMap[pos.X + i, pos.Y + j] = val + ((i == 0 || j == 0)?1:Diag); q.Enqueue(new IntCouple { X = pos.X + i, Y = pos.Y + j }); //Console.WriteLine(Q.Count); } } } } /*for (int i = 0; i < Map.MAP_WIDTH; i++) * { * for (int j = 0; j < Map.MAP_HEIGHT; j++) * { * Console.Write("{0,-10},", pathMap[i, j]); * } * Console.WriteLine(); * }//*/ }
/// <summary> /// Initializes a new instance of the <see cref="Board"/> class with a specified size. /// </summary> /// <param name="boardSize">Board size.</param> public Board(IntCouple boardSize) : this(boardSize.X, boardSize.Y) { }