diff options
| -rw-r--r-- | src/board/board.cpp | 28 | ||||
| -rw-r--r-- | src/uci.cpp | 29 |
2 files changed, 42 insertions, 15 deletions
diff --git a/src/board/board.cpp b/src/board/board.cpp index 28183a2..ab00e4a 100644 --- a/src/board/board.cpp +++ b/src/board/board.cpp @@ -92,8 +92,7 @@ UndoMove MakeMove(Move move, Game *g) { } // Promotions - if (piece.type == PAWN && move.To.rank == (piece.color ? 0 : 7)) { - // TODO parse the promote type from uci isntead of ignoreting it + if (piece.type == PAWN && move.To.rank == (piece.color ? 7 : 0)) { piece.type = move.promotion == NONEPIECE ? QUEEN : move.promotion; } @@ -168,34 +167,37 @@ UndoMove MakeMove(Move move, Game *g) { // this part was written by ai if (piece.type == ROOK) { - if (piece.color) { // White - if (move.From.rank == 7 && move.From.file == 0) // a1 + if (piece.color) { // White + if (move.From.rank == 0 && move.From.file == 0) { // a1 g->whiteCastleQueen = false; - - if (move.From.rank == 7 && move.From.file == 7) // h1 + } + if (move.From.rank == 0 && move.From.file == 7) { // h1 g->whiteCastleKing = false; - } else { // Black - if (move.From.rank == 0 && move.From.file == 0) // a8 + } + } else { // Black + if (move.From.rank == 7 && move.From.file == 0) { // a8 g->blackCastleQueen = false; + } - if (move.From.rank == 0 && move.From.file == 7) // h8 + if (move.From.rank == 7 && move.From.file == 7) { // h8 g->blackCastleKing = false; + } } } // this part is also written with ai if (piece2.type == ROOK) { if (piece2.color) { // White rook captured - if (move.To.rank == 7 && move.To.file == 0) // a1 + if (move.To.rank == 0 && move.To.file == 0) // a1 g->whiteCastleQueen = false; - if (move.To.rank == 7 && move.To.file == 7) // h1 + if (move.To.rank == 0 && move.To.file == 7) // h1 g->whiteCastleKing = false; } else { // Black rook captured - if (move.To.rank == 0 && move.To.file == 0) // a8 + if (move.To.rank == 7 && move.To.file == 0) // a8 g->blackCastleQueen = false; - if (move.To.rank == 0 && move.To.file == 7) // h8 + if (move.To.rank == 7 && move.To.file == 7) // h8 g->blackCastleKing = false; } } diff --git a/src/uci.cpp b/src/uci.cpp index ffab5bc..37a68b8 100644 --- a/src/uci.cpp +++ b/src/uci.cpp @@ -40,14 +40,40 @@ using namespace std; Move UciToMove(const string uci) { Position from; Position to; + PieceType promotion = NONEPIECE; + if (uci.length() != 4 && uci.length() != 5) { + assert(false && "expected valid uci string"); + std::cout << "expected valid uci string\n"; + exit(1); + } from.file = static_cast<uint8_t>(uci[0] - 'a'); from.rank = static_cast<uint8_t>(uci[1] - '1'); to.file = static_cast<uint8_t>(uci[2] - 'a'); to.rank = static_cast<uint8_t>(uci[3] - '1'); + if (uci.length() == 5) { + switch (toupper(static_cast<char>(uci[4]))) { + case 'Q': + promotion = QUEEN; + break; + case 'N': + promotion = KNIGHT; + break; + case 'R': + promotion = ROOK; + break; + case 'B': + promotion = BISHOP; + break; + default: + assert(false && "Unexpected promotion type"); + cout << "Unexpected promotion type"; + exit(1); + } + } - return {from, to}; + return {from, to, promotion}; } Game initBoard( @@ -89,7 +115,6 @@ static void PrintBitboard(uint64_t bb, const std::string &name) { std::printf(" | %d\n", 8 - rank); } - std::cout << " a b c d e f g h\n"; std::cout << "0x" << std::hex << bb << std::dec << "\n\n"; } |
