Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private ValuedMove AlphaBetaMove(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
- {
- if (state.IsFinal)
- return state.Leaf(Evaluate(state, false), node);
- var curr = new ValuedMove(Int32.MinValue);
- foreach (var pos in state.Grid.FreeGrid)
- {
- var newNode = node == null ? null : node.AddChild("Put in " + pos);
- var minCheck = AlphaBetaPick(state.Move(pos), newNode, alpha, beta);
- curr.CheckSmaller(minCheck, pos);
- if (curr.BetaPrune(beta, node)) return curr;
- if (curr.Value == 1000) return curr;
- alpha = Math.Max(alpha, curr.Value);
- }
- if (node != null) node.Value = curr.Value.ToString();
- return curr;
- }
- private ValuedMove AlphaBetaOpponentMove(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
- {
- if (state.IsFinal)
- return state.Leaf(Evaluate(state, true), node);
- var curr = new ValuedMove(Int32.MaxValue);
- foreach (var pos in state.Grid.FreeGrid)
- {
- var newNode = node == null ? null : node.AddChild("Put in " + pos);
- var maxCheck = AlphaBetaOpponentPick(state.Move(pos), newNode, alpha, beta);
- curr.CheckLarger(maxCheck, pos);
- if (curr.AlphaPrune(alpha, node)) return curr;
- if (curr.Value == -1000) return curr;
- beta = Math.Min(beta, curr.Value);
- }
- if (node != null) node.Value = curr.Value.ToString();
- return curr;
- }
- private ValuedMove AlphaBetaPick(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
- {
- if (state.IsFinal)
- return state.Leaf(Evaluate(state, true), node);
- var curr = new ValuedMove(Int32.MinValue);
- foreach (var piece in state.RemainingPieces)
- {
- var newNode = node == null ? null : node.AddChild("Selected " + piece);
- var minCheck = AlphaBetaOpponentMove(state.Piece(piece), newNode, alpha, beta);
- curr.CheckSmallerPiece(minCheck, piece);
- if (curr.BetaPrune(beta, node)) return curr;
- if (curr.Value == 1000) return curr;
- alpha = Math.Max(alpha, curr.Value);
- }
- if (node != null) node.Value = curr.Value.ToString();
- return curr;
- }
- private ValuedMove AlphaBetaOpponentPick(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
- {
- if (state.IsFinal)
- return state.Leaf(Evaluate(state, false), node);
- var curr = new ValuedMove(Int32.MaxValue);
- foreach (var piece in state.RemainingPieces)
- {
- var newNode = node == null ? null : node.AddChild("Selected " + piece);
- var maxCheck = AlphaBetaMove(state.Piece(piece), newNode, alpha, beta);
- curr.CheckLargerPiece(maxCheck, piece);
- if (curr.AlphaPrune(alpha, node)) return curr;
- if (curr.Value == -1000) return curr;
- beta = Math.Min(beta, curr.Value);
- }
- if (node != null) node.Value = curr.Value.ToString();
- return curr;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement