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; }
private ChessNode Min(ChessNode a, ChessNode b) { if(a==null) return b; if(b==null) return a; return (a.Utility()<=b.Utility())?a:b; }