Thanks to information provided by a previous answer I added a quiescence search to the end of my negamax search to ensure I am not left with a piece hanging. I think it works however it takes a very long time, how can I change the code to speed it up? Here is my code: (C#)
private float quiescenceSearch(Board board,float alpha, float beta)
{
qCount++;
//Evaluation without captures
float stand_pat = Evaluate(board);
if (stand_pat >= beta) return beta;
if (stand_pat > alpha) alpha = stand_pat;
Move[] legalMoves = board.GetLegalMoves();
foreach (Move move in legalMoves)
{
board.MakeMove(move);
if (move.IsCapture||board.IsInCheck())
{
float eval = -quiescenceSearch(board, -beta, -alpha);
board.UndoMove(move);
if (eval >= beta) return eval;
if (eval < alpha) alpha = eval;
}
else board.UndoMove(move);
}
return alpha;
}