24 #include <QVarLengthArray> 25 #include <QSharedPointer> 27 #include <QCoreApplication> 31 #include "genericmove.h" 38 class BoardTransition;
58 Q_DECLARE_TR_FUNCTIONS(
Board)
114 virtual Board* copy()
const = 0;
117 virtual QString variant()
const = 0;
122 virtual bool isRandomVariant()
const;
129 virtual bool variantHasDrops()
const;
134 virtual bool variantHasWallSquares()
const;
143 virtual CoordinateSystem coordinateSystem()
const;
145 virtual int width()
const = 0;
147 virtual int height()
const = 0;
149 virtual QString defaultFenString()
const = 0;
160 bool isValidSquare(
const Square& square)
const;
170 QString fenString(FenNotation notation = XFen)
const;
175 QString startingFenString()
const;
184 bool setFenString(
const QString& fen);
195 virtual Side upperCaseSide()
const;
197 Side sideToMove()
const;
199 Side startingSide()
const;
203 int plyCount()
const;
208 int repeatCount()
const;
214 virtual int reversibleMoveCount()
const;
221 int reserveCount(
Piece piece)
const;
225 Piece pieceFromSymbol(
const QString& pieceSymbol)
const;
227 QString pieceString(
int pieceType)
const;
249 QString moveString(
const Move& move, MoveNotation notation);
275 bool isLegalMove(
const Move& move);
280 bool isRepetition(
const Move& move);
287 virtual Result result() = 0;
297 virtual Result tablebaseResult(
unsigned int* dtm =
nullptr)
const;
306 virtual void vInitialize() = 0;
322 void setPieceType(
int type,
325 unsigned movement = 0,
328 virtual bool pieceHasCaptureMovement(
Piece piece,
int square,
unsigned movement)
const;
330 virtual bool pieceHasMovement(
Piece piece,
int square,
unsigned movement)
const;
332 virtual bool pieceTypeHasMovement(
int pieceType,
unsigned movement)
const;
345 virtual void vMakeMove(
const Move& move,
356 virtual void vUndoMove(
const Move& move) = 0;
359 Square chessSquare(
int index)
const;
363 int squareIndex(
const Square& square)
const;
365 int squareIndex(
const QString& str)
const;
367 QString squareString(
int index)
const;
382 virtual QString sanMoveString(
const Move& move) = 0;
384 virtual Move moveFromLanString(
const QString& str);
386 virtual Move moveFromSanString(
const QString& str) = 0;
388 virtual int maxPieceSymbolLength()
const;
397 virtual QString vFenString(FenNotation notation)
const = 0;
405 virtual bool vSetFenString(
const QStringList& fen) = 0;
433 int square)
const = 0;
441 void generateHoppingMoves(
int sourceSquare,
451 void generateSlidingMoves(
int sourceSquare,
459 virtual bool isLegalPosition() = 0;
471 virtual bool vIsLegalMove(
const Move& move);
476 virtual int captureType(
const Move& move)
const;
478 void xorKey(quint64 key);
483 bool moveExists(
const Move& move)
const;
490 int arraySize()
const;
492 Piece pieceAt(
int square)
const;
499 void setSquare(
int square,
Piece piece);
501 const Move& lastMove()
const;
511 virtual int reserveType(
int pieceType)
const;
513 void addToReserve(
const Piece& piece,
int count = 1);
515 void removeFromReserve(
const Piece& piece);
530 friend LIB_EXPORT QDebug operator<<(QDebug dbg,
const Board* board);
538 int m_maxPieceSymbolLength;
541 QSharedPointer<Zobrist> m_sharedZobrist;
549 extern LIB_EXPORT QDebug operator<<(QDebug dbg,
const Board* board);
553 return m_squares.size();
563 return m_startingSide;
568 return m_startingFen;
583 return m_squares[square];
588 Piece& old = m_squares[square];
599 return m_moveHistory.size();
604 return m_moveHistory.last().move;
622 Q_ASSERT(pieceType < m_pieceData.size());
624 return (m_pieceData[pieceType].movement & movement);
static const int NoPiece
Definition: piece.h:44
int plyCount() const
Definition: board.h:597
Side startingSide() const
Definition: board.h:561
const Move & lastMove() const
Definition: board.h:602
void setSquare(int square, Piece piece)
Definition: board.h:586
CoordinateSystem
Definition: board.h:62
MoveNotation
Definition: board.h:86
FenNotation
Definition: board.h:92
An internal chessboard class.
Definition: board.h:56
Standard Algebraic notation (SAN).
Definition: board.h:88
Piece pieceAt(const Square &square) const
Definition: board.cpp:109
Unsigned 64-bit values for generating zobrist position keys.
Definition: zobrist.h:36
QString startingFenString() const
Definition: board.h:566
virtual bool pieceHasMovement(Piece piece, int square, unsigned movement) const
Definition: board.h:612
A chess move independent of chess variant or opening book format.
Definition: genericmove.h:34
void xorKey(quint64 key)
Definition: board.h:576
quint64 key() const
Definition: board.h:571
int arraySize() const
Definition: board.h:551
Definition: boardscene.h:30
virtual bool pieceHasCaptureMovement(Piece piece, int square, unsigned movement) const
Definition: board.h:607
The side or color of a chess player.
Definition: side.h:35
bool isValid() const
Definition: piece.h:122
A chess piece.
Definition: piece.h:40
The result of a chess game.
Definition: result.h:34
virtual quint64 piece(const Piece &piece, int square) const
Definition: zobrist.cpp:106
Details of a board transition caused by a move.
Definition: boardtransition.h:40
A small and efficient chessmove class.
Definition: move.h:42
int type() const
Definition: piece.h:137
Side sideToMove() const
Definition: board.h:556
virtual bool pieceTypeHasMovement(int pieceType, unsigned movement) const
Definition: board.h:619
A generic chess square type consisting of a file and a rank.
Definition: square.h:33