private void CalculateRecursively(BoardStateNode currentNode) { ProcessNode(currentNode); foreach (var child in currentNode.Children) { CalculateRecursively(child); } }
private BoardStateNode CalculateOdds() { var rootCopy = new BoardStateNode { Value = _startingState }; CalculateRecursively(rootCopy); return(rootCopy); }
private void ProcessNode(BoardStateNode currentNode) { if (currentNode.Value.IsLeaf) { _leaves.Add(currentNode.Value); return; } var possibilities = ExecuteAttack(currentNode.Value); var possibilityChance = currentNode.Value.Probability / possibilities.Count; foreach (var possibility in possibilities) { possibility.Probability = possibilityChance; currentNode.Children.Add(new BoardStateNode { Value = possibility, Parent = currentNode, }); } }