Ejemplo n.º 1
0
        public int SearchBestMove(byte depth, DotState player, float alpha, float beta)
        {
            int bestMove = 0;

            CalculatedPositionCount = 0;

            MoveGenerator.MaxDepth = depth;
            MoveGenerator.GenerateMoves(player, depth);
            DotState nextPlayer = player.NextPlayer();

            foreach (var move in MoveGenerator.Moves)
            {
                if (alpha < beta)
                {
                    if (Field.MakeMove(move))
                    {
                        CalculatedPositionCount++;
                        MoveGenerator.UpdateMoves();
                        float tmp = -EvaluatePosition((byte)(depth - 1), nextPlayer, -beta, -alpha);
                        Field.UnmakeMove();
                        MoveGenerator.UpdateMoves();
                        if (tmp > alpha)
                        {
                            alpha = tmp;
                            bestMove = move;
                        }
                    }
                }
            }

            return bestMove;
        }
Ejemplo n.º 2
0
        private float EvaluatePosition(byte depth, DotState player, float alpha, float beta)
        {
            if (depth == 0)
                return Estimator.Estimate(player);

            MoveGenerator.GenerateMoves(player, depth);
            DotState nextPlayer = player.NextPlayer();

            foreach (var move in MoveGenerator.Moves)
            {
                if (alpha < beta)
                {
                    if (Field.MakeMove(move))
                    {
                        CalculatedPositionCount++;
                        MoveGenerator.UpdateMoves();
                        float tmp = -EvaluatePosition((byte)(depth - 1), nextPlayer, -beta, -alpha);
                        Field.UnmakeMove();
                        MoveGenerator.UpdateMoves();
                        if (tmp > alpha)
                            alpha = tmp;
                    }
                }
            }

            return alpha;
        }