Code: Select all
static s32 Qsearch(Thread* t, s32 alpha, s32 beta) {
sMove m[40];
s32 legal, score, eval;
eval = Evaluate(t);
if (eval > alpha) {
if (eval >= beta) return beta;
alpha = eval;
}
legal = GenCaptures(t, m);
if (!legal) return -ILLEGAL;
for (s32 i = 0; m[i].ft != ES; i++) {
NextMove(m, i);
MakeMove(t, &m[i]);
nodes++;
score = -Qsearch(t, -beta, -alpha);
TakeBack(t, &m[i]);
if (score > alpha) {
if (score >= beta) return beta;
alpha = score;
}
}
return alpha;
}
static s32 LMG(Thread* t, sMove* list) {
sMove m[200];
s32 l = 0;
s32 n = GenAllMoves(t, m);
for (s32 i = 0; m[i].ft != ES; i++) {
MakeMove(t, &m[i]);
m[i].sc = -Qsearch(t, -INF, INF);
TakeBack(t, &m[i]);
if (m[i].sc != ILLEGAL) {
list[l] = m[i];
l++;
}
}
list[l].ft = ES;
return n;
}
Any insights and/or advice is welcome. Thanks in advance!
