Exemple #1
0
        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;
        }
Exemple #2
0
 void CreateIntermediateTree_OnNodeEnd(ChanceTree tree, CreateIntermediateTreeContext[] stack, int depth)
 {
     CreateIntermediateTreeContext context = stack[depth];
 }