diff options
Diffstat (limited to 'src/board/board.hpp')
| -rw-r--r-- | src/board/board.hpp | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/src/board/board.hpp b/src/board/board.hpp new file mode 100644 index 0000000..7d0cb3f --- /dev/null +++ b/src/board/board.hpp @@ -0,0 +1,101 @@ +#ifndef SRC_BOARD_H_ +#define SRC_BOARD_H_ + +#include <cstdint> +#include <unordered_map> + +enum PieceType { + NONEPIECE, + PAWN, + KNIGHT, + BISHOP, + ROOK, + QUEEN, + KING, +}; + +enum GameState { + TURN, + WHITE_WON, + BLACK_WON, + STALEMATE, + DRAW, +}; + +struct Piece { + bool color = 0; + PieceType type = NONEPIECE; +}; + +struct Position { + uint8_t rank = 0; + uint8_t file = 0; + + bool operator==(const Position &) const = default; +}; +struct TranspositionsEntry { + int depth; + float Eval; +}; +struct Game { + Piece pieces[64]; + bool turn = 1; // 1 white; 0 black + bool whiteCastleKing = false; + bool whiteCastleQueen = false; + bool blackCastleKing = false; + bool blackCastleQueen = false; + uint8_t halfMoveClock = 0; + uint16_t MoveClock = 0; + Position enPassant; + bool canEnpassant = 0; + GameState state = TURN; + std::unordered_map<uint64_t, int> ThreeFoldMap; + std::unordered_map<uint64_t, TranspositionsEntry> *Transpositions = nullptr; +}; + +struct Move { + Position From; + Position To; + + PieceType promotion = NONEPIECE; + bool operator==(const Move &other) const { + return From == other.From && To == other.To && promotion == other.promotion; + } +}; +struct UndoMove { + Piece movedPiece; + Piece capturedPiece; + + Position from; + Position to; + + bool wasEnPassantCapture = false; + Position enPassantCapturedSquare; + Piece enPassantCapturedPiece; + + bool oldTurn; + bool oldCanEnpassant; + Position oldEnPassant; + + bool OldwhiteCastleKing; + bool OldwhiteCastleQueen; + bool OldblackCastleKing; + bool OldblackCastleQueen; + + int oldHalfMoveClock; + int oldMoveClock; + uint64_t zobristKey; + GameState oldState; + + // castling + bool wasCastle = false; + bool CastledSide = false; // 0 for queen side, 1 for king side +}; +Piece createPiece(PieceType type, bool color); + +int PositionToIndex(Position i); +UndoMove MakeMove(Move move, Game *g); +void UnMakeMove(UndoMove undo, Game *g); + +Position FindKing(Game *b, bool white); +#endif /* SRC_BOARD_H_ */ |
