Chess Engine
A Chess Engine project written in C++.
Loading...
Searching...
No Matches
position.hpp
1#pragma once
2
3#include <list>
4#include <string>
5
6#include "bitboard.hpp"
7#include "castling.hpp"
8#include "move.hpp"
9#include "navigation.hpp"
10#include "piece.hpp"
11
12constexpr auto DEFAULT_FEN = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR";
13const int MAX_DEPTH = 64; // Hard cap for recursion
14const int MAX_MOVES_PER_POS = 256;
15
16class Position {
17 public:
18 Position(const std::string &fen = DEFAULT_FEN) { setFromFEN(fen); }
19
20 void setFromFEN(const std::string &fen = DEFAULT_FEN);
21 [[nodiscard]] std::string toFEN() const;
22
23 void setPiece(Square square, Piece p);
24 void unsetPiece(Square square);
25 void resetBoard();
26
27 [[nodiscard]] Piece pieceAt(Square square) const { return m_board[square]; };
28
29 void toggleTurn();
30
31 [[nodiscard]] bool isLegal();
32
33 void makeMoveUci(std::string moveUci) {
34 Move move = Move(Square(moveUci.substr(0, 2)), Square(moveUci.substr(2, 2)), 0, 0);
35 doMove(move);
36 }
37
38 void doMove(Move move);
39 void undoMove();
40
41 [[nodiscard]] Color turn() const { return m_turn; }
42
43 private:
44 std::array<Piece, Square::NB> m_board{};
45 std::array<Bitboard, Color::NB> m_colorBB{Bitboard::zero()};
46 std::array<Bitboard, PieceType::NB> m_pieceTypeBB{Bitboard::zero()};
47
48 // std::list<Delta> m_deltas;
49 std::list<Move> m_moves;
50
51 Color m_turn = Color::WHITE;
52 Castling m_castling = Castling::ANY;
53 uint8_t m_halfmoves = 0;
54};
Definition castling.hpp:5
Definition piece.hpp:42
Definition move.hpp:64
Definition piece.hpp:66
Definition navigation.hpp:118