Advertisement
Guest User

Untitled

a guest
Feb 19th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.40 KB | None | 0 0
  1. private ValuedMove AlphaBetaMove(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
  2. {
  3. if (state.IsFinal)
  4. return state.Leaf(Evaluate(state, false), node);
  5.  
  6. var curr = new ValuedMove(Int32.MinValue);
  7. foreach (var pos in state.Grid.FreeGrid)
  8. {
  9. var newNode = node == null ? null : node.AddChild("Put in " + pos);
  10. var minCheck = AlphaBetaPick(state.Move(pos), newNode, alpha, beta);
  11. curr.CheckSmaller(minCheck, pos);
  12. if (curr.BetaPrune(beta, node)) return curr;
  13. if (curr.Value == 1000) return curr;
  14. alpha = Math.Max(alpha, curr.Value);
  15. }
  16.  
  17. if (node != null) node.Value = curr.Value.ToString();
  18. return curr;
  19. }
  20.  
  21. private ValuedMove AlphaBetaOpponentMove(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
  22. {
  23. if (state.IsFinal)
  24. return state.Leaf(Evaluate(state, true), node);
  25.  
  26. var curr = new ValuedMove(Int32.MaxValue);
  27. foreach (var pos in state.Grid.FreeGrid)
  28. {
  29. var newNode = node == null ? null : node.AddChild("Put in " + pos);
  30. var maxCheck = AlphaBetaOpponentPick(state.Move(pos), newNode, alpha, beta);
  31. curr.CheckLarger(maxCheck, pos);
  32. if (curr.AlphaPrune(alpha, node)) return curr;
  33. if (curr.Value == -1000) return curr;
  34. beta = Math.Min(beta, curr.Value);
  35. }
  36.  
  37. if (node != null) node.Value = curr.Value.ToString();
  38. return curr;
  39. }
  40.  
  41. private ValuedMove AlphaBetaPick(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
  42. {
  43. if (state.IsFinal)
  44. return state.Leaf(Evaluate(state, true), node);
  45.  
  46. var curr = new ValuedMove(Int32.MinValue);
  47. foreach (var piece in state.RemainingPieces)
  48. {
  49. var newNode = node == null ? null : node.AddChild("Selected " + piece);
  50. var minCheck = AlphaBetaOpponentMove(state.Piece(piece), newNode, alpha, beta);
  51. curr.CheckSmallerPiece(minCheck, piece);
  52. if (curr.BetaPrune(beta, node)) return curr;
  53. if (curr.Value == 1000) return curr;
  54. alpha = Math.Max(alpha, curr.Value);
  55. }
  56.  
  57. if (node != null) node.Value = curr.Value.ToString();
  58. return curr;
  59. }
  60.  
  61. private ValuedMove AlphaBetaOpponentPick(GameState state, AlphaBetaTreeNode node, int alpha, int beta)
  62. {
  63. if (state.IsFinal)
  64. return state.Leaf(Evaluate(state, false), node);
  65.  
  66. var curr = new ValuedMove(Int32.MaxValue);
  67. foreach (var piece in state.RemainingPieces)
  68. {
  69. var newNode = node == null ? null : node.AddChild("Selected " + piece);
  70. var maxCheck = AlphaBetaMove(state.Piece(piece), newNode, alpha, beta);
  71. curr.CheckLargerPiece(maxCheck, piece);
  72. if (curr.AlphaPrune(alpha, node)) return curr;
  73. if (curr.Value == -1000) return curr;
  74. beta = Math.Min(beta, curr.Value);
  75. }
  76.  
  77. if (node != null) node.Value = curr.Value.ToString();
  78. return curr;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement