Example #1
0
        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);
        }
Example #2
0
        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);
        }