dev: Added QS/KS castle checking; simplified moveList pruning

This commit is contained in:
A.M. Rowsell 2025-08-28 10:29:19 -04:00
commit 78749a6af2
Signed by untrusted user who does not match committer: amr
GPG key ID: E0879EDBDB0CA7B1
2 changed files with 18 additions and 7 deletions

View file

@ -126,10 +126,9 @@ std::vector<Move> King::getLegalMoves(const Square &from, const Board &board) co
// will this actually work?
moveList.erase(
std::remove_if(moveList.begin(), moveList.end(),
[&](const Square &x) {
return std::find(x.begin(), x.end(), !x.isValid()) != x.end();
}),
moveList.end());
[&](const auto &x) {
return !x.to.isValid();
}));
return moveList;
}

View file

@ -11,6 +11,7 @@
#pragma once
#include <cstdint>
#include <algorithm>
#include <utility>
#include <string>
#include <memory>
@ -34,6 +35,10 @@ enum File {
A = 0, B = 1, C = 2, D = 3, E = 4, F = 5, G = 6, H = 7, INVALID_FILE = 255
};
enum CastleSide {
KINGSIDE = 1, QUEENSIDE = 2
};
struct Square {
Rank rank;
File file;
@ -101,11 +106,18 @@ class King : public Piece {
return inCheck;
}
bool checkForCastle() const {
return canCastle;
bool checkForCastle(enum CastleSide side) const {
if(side == KINGSIDE) {
return canCastleKS;
} else if(side == QUEENSIDE) {
return canCastleQS;
} else {
return false;
}
}
protected:
bool canCastle = true;
bool canCastleQS = true;
bool canCastleKS = true;
bool inCheck = false;
};