aboutsummaryrefslogtreecommitdiff
path: root/src/board/board.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/board/board.hpp')
-rw-r--r--src/board/board.hpp101
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_ */