[Board] Implement piece and setPiece
This commit is contained in:
30
Board.hpp
30
Board.hpp
@@ -10,12 +10,19 @@
|
||||
#include <iosfwd>
|
||||
#include <vector>
|
||||
|
||||
#define IDX_TO_COLOR(i) static_cast<PieceColor>(i % 2)
|
||||
#define IDX_TO_TYPE(i) static_cast<PieceType>(i - (i % 2))
|
||||
|
||||
#define BB_NUM 12 // 6 pieces, 2 colors
|
||||
|
||||
class Board {
|
||||
public:
|
||||
|
||||
using Optional = std::optional<Board>;
|
||||
using MoveVec = std::vector<Move>;
|
||||
|
||||
using BitBoard = uint64_t;
|
||||
|
||||
Board();
|
||||
|
||||
void setPiece(const Square &square, const Piece::Optional &piece);
|
||||
@@ -32,6 +39,29 @@ public:
|
||||
void pseudoLegalMoves(MoveVec &moves) const;
|
||||
void pseudoLegalMovesFrom(const Square &from, MoveVec &moves) const;
|
||||
|
||||
private:
|
||||
|
||||
BitBoard mPieceBBs[BB_NUM] = {};
|
||||
|
||||
static inline void clearIndex(BitBoard &b, unsigned int i) {
|
||||
b &= ~(1ULL << i);
|
||||
}
|
||||
|
||||
static inline void setIndex(BitBoard &b, unsigned int i) {
|
||||
b |= 1ULL << i;
|
||||
}
|
||||
|
||||
static inline BitBoard indexToBitBoard(unsigned int i) {
|
||||
return (1ULL << i);
|
||||
}
|
||||
|
||||
static inline PieceColor indexToColor(unsigned int i) {
|
||||
return static_cast<PieceColor>(i % 2);
|
||||
}
|
||||
|
||||
static inline PieceType indexToType(unsigned int i) {
|
||||
return static_cast<PieceType>(i - (i % 2));
|
||||
}
|
||||
};
|
||||
|
||||
std::ostream &operator<<(std::ostream &os, const Board &board);
|
||||
|
Reference in New Issue
Block a user