コード例 #1
0
        private List<Node> GetParents(Node sourceNode)
        {
            List<Node> results = new List<Node>();
            if (sourceNode.Location.Y - 1 >= 0)
            {
                var north = NodeMap[sourceNode.Location.X, sourceNode.Location.Y - 1];
                results.Add(north);
            }

            if (sourceNode.Location.Y + 1 <= NodeMap.GetLength(0) - 1)
            {
                var south = NodeMap[sourceNode.Location.X, sourceNode.Location.Y + 1];
                results.Add(south);
            }

            if (sourceNode.Location.X + 1 <= NodeMap.GetLength(1) - 1)
            {
                var east = NodeMap[sourceNode.Location.X + 1, sourceNode.Location.Y];
                results.Add(east);
            }

            if (sourceNode.Location.X - 1 >= 0)
            {
                var west = NodeMap[sourceNode.Location.X - 1, sourceNode.Location.Y];
                results.Add(west);
            }
            return results;
        }
コード例 #2
0
ファイル: ShortestPath.cs プロジェクト: jimfim/vindinium-bot
	    private void AssignCost(int cost, Node node)
	    {
            if (cost < node.MovementCost)
            {
                if (node.Type == Tile.IMPASSABLE_WOOD || node.Type == Tile.GOLD_MINE_1)
                {
                    node.Passable = false;
                    node.MovementCost = -1;
                }
                else if (node.Type == Tile.GOLD_MINE_2 || 
                    node.Type == Tile.GOLD_MINE_3 || 
                    node.Type == Tile.GOLD_MINE_4 || 
                    node.Type == Tile.GOLD_MINE_NEUTRAL ||
                    node.Type == Tile.TAVERN ||
                    node.Type == Tile.HERO_1 ||
                    node.Type == Tile.HERO_2 ||
                    node.Type == Tile.HERO_3 ||
                    node.Type == Tile.HERO_4)
                {
                    node.MovementCost = cost;
                    node.Passable = false;
                }
                else
                {
                    node.MovementCost = cost;
                    node.Passable = true;
                }
            }
	    }
コード例 #3
0
ファイル: ShortestPath.cs プロジェクト: jimfim/vindinium-bot
	    private void FindAllRoutes(int depth, Node parentNode)
	    {
            depth++;
            foreach (var node in parentNode.Parents.Where(n => n.MovementCost > depth))
            {
                AssignCost(depth, node);
                if (node.Passable)
                {
                    FindAllRoutes(depth, node);
                }
            }
        }
コード例 #4
0
 private Node[,] ConvertToNodeMap(Tile[,] board)
 {
     Node[,] nodemap = new Node[board.GetLength(0), board.GetLength(1)];
     int count = 0;
     for (int xIndex = 0; xIndex < board.GetLength(0); xIndex++)
     {
         for (int yIndex = 0; yIndex < board.GetLength(1); yIndex++)
         {
             nodemap[xIndex, yIndex] = new Node(board[xIndex, yIndex], xIndex, yIndex) {Id = count};
             count++;
         }
     }
     return nodemap;
 }