diff options
| author | Adam <adammegarules1@gmail.com> | 2026-08-14 10:17:20 +0200 |
|---|---|---|
| committer | Adam <adammegarules1@gmail.com> | 2026-08-14 10:17:20 +0200 |
| commit | e4c3be3b28ffcf93b1f83aa075c89b77f102e704 (patch) | |
| tree | 4a9e4f3a62b5b35d1685d86ac2fde59a7909bc89 /src/board/board.cpp | |
| parent | de8f43c35b435674777eca98790ed3d086682ce4 (diff) | |
adding a create move helper function
Diffstat (limited to 'src/board/board.cpp')
| -rw-r--r-- | src/board/board.cpp | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/board/board.cpp b/src/board/board.cpp index 9d0ef47..3b1383a 100644 --- a/src/board/board.cpp +++ b/src/board/board.cpp @@ -10,6 +10,48 @@ int PositionToIndex(Position i) { return (i.rank * 8) + i.file; } +uint16_t CreateMove(uint8_t from, uint8_t to, PieceType promotion) { + if (from >= 64 || to >= 64) { + std::cout << "expected a valid chess piece position 0-63"; + assert(false); + } + uint16_t move = 0; + bool firstPromotionFlag = false; + bool secondPromotionFlag = false; + switch (promotion) { + case NONEPIECE: + case KNIGHT: + firstPromotionFlag = false; + secondPromotionFlag = false; + break; + case QUEEN: + firstPromotionFlag = true; + secondPromotionFlag = false; + break; + case ROOK: + firstPromotionFlag = false; + secondPromotionFlag = true; + break; + case BISHOP: + firstPromotionFlag = true; + secondPromotionFlag = true; + break; + default: + std::cout << "unexpected promotion type"; + assert(false); + exit(1); + } + if (firstPromotionFlag) { + move |= (1 << 1); + } + if (secondPromotionFlag) { + move |= (1 << 0); + } + move |= (from << 2); + move |= (to << 8); + return move; +}; + PieceType getPromotionTypeFromMove(uint16_t move) { bool firstFlag = (move & (1 << 1)) != 0; bool secondFlag = (move & (1 << 0)) != 0; |
