24 #include <QVarLengthArray> 25 #include <QSharedPointer> 27 #include <QCoreApplication> 31 #include "genericmove.h" 39 class BoardTransition;
59 Q_DECLARE_TR_FUNCTIONS(
Board)
115 virtual Board* copy()
const = 0;
118 virtual QString variant()
const = 0;
123 virtual bool isRandomVariant()
const;
130 virtual bool variantHasDrops()
const;
139 virtual bool variantHasOptionalPromotions()
const;
144 virtual bool variantHasWallSquares()
const;
155 virtual int width()
const = 0;
157 virtual int height()
const = 0;
159 virtual QString defaultFenString()
const = 0;
170 bool isValidSquare(
const Square& square)
const;
185 QString startingFenString()
const;
194 bool setFenString(
const QString& fen);
205 virtual Side upperCaseSide()
const;
207 Side sideToMove()
const;
209 Side startingSide()
const;
213 int plyCount()
const;
218 int repeatCount()
const;
224 virtual int reversibleMoveCount()
const;
231 int reserveCount(
Piece piece)
const;
235 Piece pieceFromSymbol(
const QString& pieceSymbol)
const;
237 QString pieceString(
int pieceType)
const;
285 bool isLegalMove(
const Move& move);
290 bool isRepetition(
const Move& move);
297 virtual Result result() = 0;
307 virtual Result tablebaseResult(
unsigned int* dtm =
nullptr)
const;
316 virtual void vInitialize() = 0;
332 void setPieceType(
int type,
335 unsigned movement = 0,
338 bool pieceHasMovement(
int pieceType,
unsigned movement)
const;
351 virtual void vMakeMove(
const Move& move,
362 virtual void vUndoMove(
const Move& move) = 0;
365 Square chessSquare(
int index)
const;
369 int squareIndex(
const Square& square)
const;
371 int squareIndex(
const QString& str)
const;
373 QString squareString(
int index)
const;
388 virtual QString sanMoveString(
const Move& move) = 0;
390 virtual Move moveFromLanString(
const QString& str);
392 virtual Move moveFromSanString(
const QString& str) = 0;
394 virtual int maxPieceSymbolLength()
const;
411 virtual bool vSetFenString(
const QStringList& fen) = 0;
439 int square)
const = 0;
447 void generateHoppingMoves(
int sourceSquare,
457 void generateSlidingMoves(
int sourceSquare,
465 virtual bool isLegalPosition() = 0;
477 virtual bool vIsLegalMove(
const Move& move);
482 virtual int captureType(
const Move& move)
const;
484 void xorKey(quint64 key);
489 bool moveExists(
const Move& move)
const;
496 int arraySize()
const;
498 Piece pieceAt(
int square)
const;
505 void setSquare(
int square,
Piece piece);
507 const Move& lastMove()
const;
517 virtual int reserveType(
int pieceType)
const;
519 void addToReserve(
const Piece& piece,
int count = 1);
521 void removeFromReserve(
const Piece& piece);
536 friend LIB_EXPORT QDebug operator<<(QDebug dbg,
const Board* board);
544 int m_maxPieceSymbolLength;
547 QSharedPointer<Zobrist> m_sharedZobrist;
555 extern LIB_EXPORT QDebug operator<<(QDebug dbg,
const Board* board);
559 return m_squares.size();
569 return m_startingSide;
574 return m_startingFen;
589 return m_squares[square];
594 Piece& old = m_squares[square];
596 xorKey(m_zobrist->piece(old, square));
598 xorKey(m_zobrist->piece(piece, square));
605 return m_moveHistory.size();
610 return m_moveHistory.last().move;
616 Q_ASSERT(pieceType < m_pieceData.size());
618 return (m_pieceData[pieceType].movement & movement);
static const int NoPiece
Definition: piece.h:44
bool pieceHasMovement(int pieceType, unsigned movement) const
Definition: board.h:613
bool isValid() const
Definition: piece.h:122
const Move & lastMove() const
Definition: board.h:608
QString startingFenString() const
Definition: board.h:572
void setSquare(int square, Piece piece)
Definition: board.h:592
CoordinateSystem
Definition: board.h:63
MoveNotation
Definition: board.h:87
FenNotation
Definition: board.h:93
quint64 key() const
Definition: board.h:577
An internal chessboard class.
Definition: board.h:57
Standard Algebraic notation (SAN).
Definition: board.h:89
Piece pieceAt(const Square &square) const
Definition: board.cpp:110
Unsigned 64-bit values for generating zobrist position keys.
Definition: zobrist.h:36
int arraySize() const
Definition: board.h:557
A chess move independent of chess variant or opening book format.
Definition: genericmove.h:34
void xorKey(quint64 key)
Definition: board.h:582
Definition: boardscene.h:29
Side sideToMove() const
Definition: board.h:562
The side or color of a chess player.
Definition: side.h:35
A chess piece.
Definition: piece.h:40
The result of a chess game.
Definition: result.h:34
Details of a board transition caused by a move.
Definition: boardtransition.h:40
A small and efficient chessmove class.
Definition: move.h:42
int plyCount() const
Definition: board.h:603
A generic chess square type consisting of a file and a rank.
Definition: square.h:33
Side startingSide() const
Definition: board.h:567