Exemplo n.º 1
0
        ChessNode MinSearch(ChessNode node, int level, int alpha, int beta)
        {
            if(node.GetData() != null){
                if(_board.TerminalState(node.GetData())){
                    node.SetUtility(node.Utility() + level);
                    return node;
                }
                else if(level == 1){
                    node.SetUtility(Util () - level);
                    return node;
                }
            }

            if(Time.realtimeSinceStartup - elapsedTime > maxTime){
                return node;
            }

            int v = int.MaxValue;
            ChessNode result = null;

            foreach(Action cAction in GetPossibleMove(1)){
                ChessNode cNode = new ChessNode(node, cAction);
                _board.ApplyAction(cAction);
                result = Min (result, MaxSearch(cNode, level-1,alpha, beta));
                _board.RevertAction(cAction);
                if(result != null)
                    v = result.Utility();
                beta = Math.Min(beta, v);
                if(beta <= alpha){
                    return result;
                }
            }

            return result;
        }
Exemplo n.º 2
0
 private ChessNode Min(ChessNode a, ChessNode b)
 {
     if(a==null) return b;
     if(b==null) return a;
     return (a.Utility()<=b.Utility())?a:b;
 }