aboutsummaryrefslogtreecommitdiff
path: root/src/moves.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/moves.cpp')
-rw-r--r--src/moves.cpp50
1 files changed, 12 insertions, 38 deletions
diff --git a/src/moves.cpp b/src/moves.cpp
index 2663ea0..f741b7f 100644
--- a/src/moves.cpp
+++ b/src/moves.cpp
@@ -164,6 +164,17 @@ std::vector<Move> GetLegalMoves(Game *g) {
}
}
+ return legalMoves;
+}
+GameState GetNewGameState(Game *g) {
+ auto legalMoves = GetLegalMoves(g);
+
+ // make sure we dont override game ending states
+ if (g->state == DRAW || g->state == STALEMATE || g->state == WHITE_WON ||
+ g->state == BLACK_WON) {
+ return g->state;
+ }
+
if (legalMoves.empty()) {
Position kingPosition = FindKing(g, g->turn);
@@ -175,44 +186,7 @@ std::vector<Move> GetLegalMoves(Game *g) {
g->state = STALEMATE;
}
}
-
- for (Move move : moves) {
- bool isLegal = true;
- UndoMove undo = MakeMove(move, g);
- auto opponentResponse = GetPseudoLegalMoves(g);
- for (Move move : opponentResponse) {
- if (g->pieces[PositionToIndex(move.To)].type == KING) {
- isLegal = false;
- }
- }
- UnMakeMove(undo, g);
- if (isLegal) {
- legalMoves.push_back(move);
- };
- }
- if (legalMoves.size() == 0) {
- bool isCheck = false;
-
- Game testBoard = *g;
- testBoard.turn = !testBoard.turn;
- auto opponentResponse = GetPseudoLegalMoves(&testBoard);
- for (Move move : opponentResponse) {
- if (testBoard.pieces[PositionToIndex(move.To)].type == KING) {
- isCheck = true;
- }
- }
-
- if (isCheck) {
- if (g->turn) {
- g->state = BLACK_WON;
- } else {
- g->state = WHITE_WON;
- };
- } else {
- g->state = STALEMATE;
- }
- }
- return legalMoves;
+ return TURN;
}
bool IsSquareAttacked(Game *board, Position square, bool white) {