예제 #1
0
        public void PrintNodeHistory(int nodeIndex = 0)
        {
            StringBuilder          sb = new StringBuilder();
            LinkedList <GameSpace> list = new LinkedList <GameSpace>();
            int       id, offset;
            GameSpace tempSpace;
            var       currentSpace = (nodeIndex > 0 && nodeIndex < Spaces.Count) ? Spaces[nodeIndex] : Spaces.LastOrDefault();

            // Ensure a "substituted" node was selected. If sure select then next previous node that has an adjacency list.
            id = currentSpace.Id;
            if (!ParentOfGameSpace.TryGetValue(id, out tempSpace))
            {
                for (int i = 1; i <= 6; ++i) // Reverse up-to 6 spaces - one die roll
                {
                    if ((id - i) > 0 && ParentOfGameSpace.TryGetValue(id - i, out tempSpace))
                    {
                        list.AddFirst(currentSpace);
                        currentSpace = Spaces[id - i];
                        offset       = i;
                        break;
                    }
                }
            }

            // build list of nodes using each node's parent
            while (currentSpace != null && currentSpace.Id != int.MinValue)
            {
                list.AddFirst(currentSpace);
                id = currentSpace.Id;
                ParentOfGameSpace.TryGetValue(id, out currentSpace);
            }

            for (var currentNode = list.First; currentNode != null; currentNode = currentNode.Next)
            {
                if (sb.Length > 0)
                {
                    sb.Append(" -> ");
                }
                sb.Append($"[{currentNode.Value.Id:D4}]");
            }
            sb.Insert(0, "Best path found: ");
            Console.WriteLine(sb.ToString());
        }
예제 #2
0
 public void Reset()
 {
     ParentOfGameSpace.Clear();
     GameSpaceLevels.Clear();
 }