diff options
Diffstat (limited to 'src/moves.cpp')
| -rw-r--r-- | src/moves.cpp | 50 |
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) { |
