void CreateIntermediateTree_OnNodeBegin(ChanceTree tree, CreateIntermediateTreeContext[] stack, int depth) { CreateIntermediateTreeContext context = stack[depth]; Int64 n = context.NodeIdx; int round = (depth - 1) / _gameDef.MinPlayers; if (depth == 0) { _intRoot = context.IntNode = new IntermediateNode(); _intRoot.Position = tree.Nodes[0].Position; _intRoot.Card = tree.Nodes[0].Card; _intRoot.Probab = tree.Nodes[0].Probab; return; } int curPlayer = tree.Nodes[n].Position; int curCard = tree.Nodes[n].Card; _hands[curPlayer][round] = curCard; int abstrCard = _abstractions[curPlayer].GetAbstractCard(_hands[curPlayer], round + 1); context.IntNode = stack[depth - 1].IntNode.FindOrCreateChild(abstrCard, ref _nodesCount); // Set or update properties of the intermediate node. context.IntNode.Position = curPlayer; context.IntNode.Card = abstrCard; double [] potShare = new double[_gameDef.MinPlayers]; UInt16 [] activePlayers = depth == _maxDepth ? _activePlayersAll : _activePlayersOne; foreach (UInt16 ap in activePlayers) { tree.Nodes[n].GetPotShare(ap, potShare); context.IntNode.AddPotShare(ap, potShare, tree.Nodes[n].Probab); } context.IntNode.Probab += tree.Nodes[n].Probab; }
void CreateIntermediateTree_OnNodeEnd(ChanceTree tree, CreateIntermediateTreeContext[] stack, int depth) { CreateIntermediateTreeContext context = stack[depth]; }