public int Move() { int max = -10; Node bestNode = new Node(); for (int x = 0; x <= 8; x++) { Node n = new Node(); n.copy(rootNode); if (n.board.SetMove(x) == true) { rootNode.AddChildren(n); n.moveBox = x; int val = minimaxAB(n, true, 100, -10, 10); if (val >= max) { max = val; bestNode = n; } } } return(bestNode.moveBox); }
private int minimaxAB(Node node, bool min, int depth, int alpha, int beta) { if (boardPoint(node) != -2) { //|| depth == 0) { // if (depth <= 0) { // Console.Write("Depth Reached"); // } node.point = boardPoint(node); //node.Print(); //Console.Writeln(nodeCount++ + " node.point: " + node.point + " Alpha: " + alpha + " Beta: " + beta); return(boardPoint(node)); } else { if (min == true) { for (int x = 0; x <= 8; x++) { Node n = new Node(); n.copy(node); if (n.board.SetMove(x) == true) { node.AddChildren(n); n.moveBox = x; //Console.Writeln("In min:"+ min); int val = minimaxAB(n, false, depth - 1, alpha, beta); if (val < beta) { beta = val; n.parent.point = val; } } } //Console.Writeln("Out min:"+ min); return(beta); } if (min == false) { for (int x = 0; x <= 8; x++) { Node n = new Node(); n.copy(node); if (n.board.SetMove(x) == true) { node.AddChildren(n); n.moveBox = x; //Console.Writeln("In min:"+ min); int val = minimaxAB(n, true, depth - 1, alpha, beta); if (val > alpha) { alpha = val; n.parent.point = val; } } } //Console.Writeln("Out min:"+ min); return(alpha); } } return(-100); }