Belofte version 2.2.0
A promising chess program using the UCI or Winboard interface
piece.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------+
2 * File: piece.h
3 * Project: part of belofte - A Promising Chess Program
4 * Author: yves
5 * SPDX-License-Identifier: GPL-2.0-only
6+----------------------------------------------------------------------*/
7
8#if !defined(PIECE_H)
9#define PIECE_H
10
11#define S_P_BISHOP "B"
12#define S_P_KING "K"
13#define S_P_KNIGHT "N"
14#define S_P_PAWN "P"
15#define S_P_QUEEN "Q"
16#define S_P_ROOK "R"
17#define S_P_EMPTY ""
18
19enum tCPiece : unsigned char {
20 C_EMPTY = ' ',
22 C_W_KING = 'K',
24 C_W_PAWN = 'P',
25 C_W_QUEEN = 'Q',
26 C_W_ROOK = 'R',
28 C_B_KING = 'k',
30 C_B_PAWN = 'p',
31 C_B_QUEEN = 'q',
33};
34
35typedef enum tCPiece cpiece_t;
36
43
44typedef enum tPiece piece_t;
45
51
52typedef enum tPPiece ppiece_t;
53
58
59enum class tSide : uint8_t {
63};
64
65typedef enum tSide side_t;
66
67//-----------------------------------------------------------------------
68
69void bPiece_ctor();
70void bPiece_dtor();
71
72//-----------------------------------------------------------------------
73
74class bBasicBoard;
75class bBoard;
76class bCase;
77class bMoveList;
78
79//-----------------------------------------------------------------------
80
81/** piece representation */
82class bPiece {
83public:
84 explicit bPiece()
85 {}
86 explicit bPiece(bPiece&& bp)
87 : m_piece{std::move(bp.m_piece)}
88 {}
89 explicit bPiece(piece_t piece)
90 : m_piece(piece)
91 {}
92 virtual ~bPiece()
93 {}
94
95 // no copy or move ctor nor assignment defined
96 bPiece(bPiece const&) = delete;
97 bPiece& operator=(bPiece const&) = delete;
98 bPiece& operator=(bPiece&&) = delete;
99
100 // get piece letter
101 constexpr piece_t getPiece() const
102 { return m_piece; }
103
105 case_t const& cf) = 0;
107 case_t const& cf, bMoveList& ml) = 0;
108
109 side_t toMove() const;
110
111public:
112 static piece_t getPiece(cpiece_t const piece);
113 static cpiece_t getPieceChar(piece_t const piece);
114 static bPiece* getPieceClass(piece_t const piece);
115 static std::string getPieceStrUpper(piece_t const piece);
116 static bool isOpponent(side_t const s, piece_t const piece);
117 static bool isOwnColour(side_t const s, piece_t const piece);
118 static bool isWhitePiece(piece_t const p);
119 static bool isBlackPiece(piece_t const p);
120
121private:
122 friend std::ostream& operator<<(std::ostream& os, bPiece const& bp)
123 { if (bp.m_piece) os << bp.m_piece;
124 return os;
125 }
126
127private:
128 piece_t m_piece = tPiece::P_EMPTY;
129};
130
131//-----------------------------------------------------------------------
132
133#if defined(__GNUC__)
134#pragma GCC diagnostic push
135#pragma GCC diagnostic ignored "-Wunused-parameter"
136#endif
137
139public:
141 : m_side{s}
142 {}
144 {}
145
146 // no copy or move ctor nor assignment defined
147 bPieceColour(bPieceColour const&) = delete;
151
152 constexpr bool isWhite() const
153 { return m_side == tSide::SIDE_WHITE; }
154 constexpr bool isBlack() const
155 { return m_side == tSide::SIDE_BLACK; }
156 constexpr bool isEmpty() const
157 { return m_side == tSide::SIDE_UNDEFINED; }
158 constexpr side_t opponent() const
160 constexpr side_t toMove() const
162
163 virtual bool isAttacked(bBasicBoard const& b, case_t const& cf) const
164 { return false; }
169
171 case_t const& cf, case_t const& ct) const = 0;
173 case_t const& cf, int8_t const ri, int8_t const ci) const = 0;
174 virtual movenum_t addMove(bBasicBoard const& b, case_t const& cf,
175 case_t const& ct, bMoveList& ml) const = 0;
176 virtual movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
177 int8_t const ri, int8_t const ci,
178 bMoveList& ml) const = 0;
179
180protected:
181 static bool isAttackedBySlider(bBasicBoard const& b,
182 case_t cf, column_t fromcol, rank_t fromrank,
183 int8_t const ci, int8_t const ri,
184 piece_t const cPiece, piece_t const cPiece2);
185
187};
188
189#if defined(__GNUC__)
190#pragma GCC diagnostic pop
191#endif
192
193//-----------------------------------------------------------------------
194
195class bWhitePiece : public bPieceColour {
196public:
200 ~bWhitePiece() override
201 {}
202
204 case_t const& cf, case_t const& ct) const override;
206 case_t const& cf, int8_t const ri, int8_t const ci) const override;
207 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override;
208 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
209 case_t const& ct, bMoveList& ml) const override;
210 movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
211 int8_t const ri, int8_t const ci,
212 bMoveList& ml) const override;
213};
214
215class bBlackPiece : public bPieceColour {
216public:
220 ~bBlackPiece() override
221 {}
222
224 case_t const& cf, case_t const& ct) const override;
226 case_t const& cf, int8_t const ri, int8_t const ci) const override;
227 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override;
228 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
229 case_t const& ct, bMoveList& ml) const override;
230 movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
231 int8_t const ri, int8_t const ci,
232 bMoveList& ml) const override;
233};
234
235#if defined(__GNUC__)
236#pragma GCC diagnostic push
237#pragma GCC diagnostic ignored "-Wunused-parameter"
238#endif
239
240/// @todo Candidate for template implementation
241
242class bEmptyPiece : public bPiece, public bPieceColour {
243public:
247 ~bEmptyPiece() override
248 {}
249
251 case_t const& cf, case_t const& ct) const override
252 { return false; }
254 case_t const& cf,
255 int8_t const ri, int8_t const ci) const override
256 { return false; }
257 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override
258 { return false; }
259 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
260 case_t const& ct, bMoveList& ml) const override
261 { return 0; }
263 int8_t const ri, int8_t const ci,
264 bMoveList& ml) const override
265 { return 0; }
267 case_t const& cf) override
268 { return false; }
270 case_t const& cf, bMoveList& ml) override
271 { return 0; }
272};
273
274#if defined(__GNUC__)
275#pragma GCC diagnostic pop
276#endif
277
278class bPawn : public bPiece {
279public:
280 explicit bPawn(piece_t p)
281 : bPiece(p)
282 {}
283 ~bPawn() override
284 {}
285};
286
287class bWhitePawn : public bPawn, public bWhitePiece {
288public:
289 explicit bWhitePawn()
291 {}
292 ~bWhitePawn() override
293 {}
294
296 case_t const& cf,
297 int8_t const ri, int8_t const ci) const override;
299 case_t const& cf) override;
300 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
301 bMoveList& ml) override;
302
303protected:
304 static movenum_t addNonCapturePawnMove(bBasicBoard const& b, case_t const& cf,
305 bMoveList& ml);
306 static movenum_t addEPMove(bBasicBoard const& b, case_t const& cf,
307 int8_t const ci, bMoveList& ml);
308 static movenum_t addCapturePawnMove(bBasicBoard const& b, case_t const& cf,
309 int8_t const ci, bMoveList& ml);
310 static movenum_t addNonCapturePromotionMove(bBasicBoard const& b, case_t const& cf,
311 bMoveList& ml);
312 static movenum_t addCapturePromotionMove(bBasicBoard const& b, case_t const& cf,
313 int8_t const ci, bMoveList& ml);
314
315private:
316 bool canPawnMove(bBasicBoard& b, case_t const& cf) const;
317 bool canPawnCapture(bBasicBoard& b, case_t const& cf,
318 int8_t const ci) const;
319 bool canPawnEPMove(bBasicBoard& b, case_t const& cf,
320 int8_t const ci) const;
321};
322
323class bBlackPawn : public bPawn, public bBlackPiece {
324public:
325 explicit bBlackPawn()
327 {}
328 ~bBlackPawn() override
329 {}
330
332 case_t const& cf,
333 int8_t const ri, int8_t const ci) const override;
335 case_t const& cf) override;
336 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
337 bMoveList& ml) override;
338
339protected:
340 static movenum_t addNonCapturePawnMove(bBasicBoard const& b, case_t const& cf,
341 bMoveList& ml);
342 static movenum_t addEPMove(bBasicBoard const& b, case_t const& cf,
343 int8_t const ci, bMoveList& ml);
344 static movenum_t addCapturePawnMove(bBasicBoard const& b, case_t const& cf,
345 int8_t const ci, bMoveList& ml);
346 static movenum_t addNonCapturePromotionMove(bBasicBoard const& b, case_t const& cf,
347 bMoveList& ml);
348 static movenum_t addCapturePromotionMove(bBasicBoard const& b, case_t const& cf,
349 int8_t const ci, bMoveList& ml);
350
351private:
352 bool canPawnMove(bBasicBoard& b, case_t const& cf) const;
353 bool canPawnCapture(bBasicBoard& b, case_t const& cf,
354 int8_t const ci) const;
355 bool canPawnEPMove(bBasicBoard& b, case_t const& cf,
356 int8_t const ci) const;
357};
358
359class bKnight : public bPiece {
360public:
361 explicit bKnight(piece_t p)
362 : bPiece(p)
363 {}
364 ~bKnight() override
365 {}
366};
367
368class bWhiteKnight : public bKnight, public bWhitePiece {
369public:
373 ~bWhiteKnight() override
374 {}
375
377 case_t const& cf) override;
378 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
379 bMoveList& ml) override;
380};
381
382class bBlackKnight : public bKnight, public bBlackPiece {
383public:
387 ~bBlackKnight() override
388 {}
389
391 case_t const& cf) override;
392 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
393 bMoveList& ml) override;
394};
395
396class bBishop : public bPiece {
397public:
398 explicit bBishop(piece_t p)
399 : bPiece(p)
400 {}
401 ~bBishop() override
402 {}
403};
404
405class bWhiteBishop : public bBishop, public bWhitePiece {
406public:
410 ~bWhiteBishop() override
411 {}
412
414 case_t const& cf) override;
415 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
416 bMoveList& ml) override;
417};
418
419class bBlackBishop : public bBishop, public bBlackPiece {
420public:
424 ~bBlackBishop() override
425 {}
426
428 case_t const& cf) override;
429 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
430 bMoveList& ml) override;
431};
432
433class bRook : public bPiece {
434public:
435 explicit bRook(piece_t p)
436 : bPiece(p)
437 {}
438 ~bRook() override
439 {}
440};
441
442class bWhiteRook : public bRook, public bWhitePiece {
443public:
446 {}
447 ~bWhiteRook() override
448 {}
449
451 case_t const& cf) override;
452 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
453 bMoveList& ml) override;
454};
455
456class bBlackRook : public bRook, public bBlackPiece {
457public:
460 {}
461 ~bBlackRook() override
462 {}
463
465 case_t const& cf) override;
466 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
467 bMoveList& ml) override;
468};
469
470class bQueen : public bPiece {
471public:
472 explicit bQueen(piece_t p)
473 : bPiece(p)
474 {}
475 ~bQueen() override
476 {}
477};
478
479class bWhiteQueen : public bQueen, public bWhitePiece {
480public:
484 ~bWhiteQueen() override
485 {}
486
488 case_t const& cf) override;
489 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
490 bMoveList& ml) override;
491};
492
493class bBlackQueen : public bQueen, public bBlackPiece {
494public:
498 ~bBlackQueen() override
499 {}
500
502 case_t const& cf) override;
503 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
504 bMoveList& ml) override;
505};
506
507class bKing : public bPiece {
508public:
509 explicit bKing(piece_t p)
510 : bPiece(p)
511 {}
512 ~bKing() override
513 {}
514};
515
516class bWhiteKing : public bKing, public bWhitePiece {
517public:
520 {}
521 ~bWhiteKing() override
522 {}
523
525 case_t const& cf) override;
526 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
527 bMoveList& ml) override;
528};
529
530class bBlackKing : public bKing, public bBlackPiece {
531public:
534 {}
535 ~bBlackKing() override
536 {}
537
539 case_t const& cf) override;
540 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
541 bMoveList& ml) override;
542};
543
544// --------------------------------------------------------------------
545
546#endif // defined PIECE_H
547
548// eof
int8_t rank_t
Definition belofte.h:97
int8_t column_t
Definition belofte.h:98
uint_fast8_t movenum_t
Definition belofte.h:103
uint8_t case_t
Definition belofte.h:99
bBishop(piece_t p)
Definition piece.h:398
~bBishop() override
Definition piece.h:401
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1110
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1132
~bBlackBishop() override
Definition piece.h:424
bBlackBishop()
Definition piece.h:421
~bBlackKing() override
Definition piece.h:535
bBlackKing()
Definition piece.h:532
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1270
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1216
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1089
~bBlackKnight() override
Definition piece.h:387
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1068
bBlackKnight()
Definition piece.h:384
static movenum_t addNonCapturePromotionMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml)
Definition piece.cpp:845
~bBlackPawn() override
Definition piece.h:328
bBlackPawn()
Definition piece.h:325
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:989
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
check if there is at least one move possible currently, relies on full move generation for pawn
Definition piece.cpp:977
static movenum_t addNonCapturePawnMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml)
Class static function Test move is possible, single step move non capture move.
Definition piece.cpp:773
static movenum_t addCapturePawnMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Definition piece.cpp:811
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const override
Check if pawn move could be added by just checking there is not check, case of possible promotion.
Definition piece.cpp:524
static movenum_t addEPMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Test move is possible, e.p.
Definition piece.cpp:919
static movenum_t addCapturePromotionMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Definition piece.cpp:879
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, case_t const &ct) const override
Check if any could be added by just checking there.
Definition piece.cpp:467
bBlackPiece()
Definition piece.h:217
bool isAttacked(bBasicBoard const &b, case_t const &cf) const override
Definition piece.cpp:303
~bBlackPiece() override
Definition piece.h:220
movenum_t addMoves(bBasicBoard const &b, case_t const &cf, int8_t const ri, int8_t const ci, bMoveList &ml) const override
Definition piece.cpp:617
movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const override
Definition piece.cpp:566
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1188
bBlackQueen()
Definition piece.h:495
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1158
~bBlackQueen() override
Definition piece.h:498
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1046
bBlackRook()
Definition piece.h:458
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1024
~bBlackRook() override
Definition piece.h:461
board
Definition board.h:45
position on board, defined as 255 if invalid used primarily to compose a move or a source or destinat...
Definition case.h:18
bEmptyPiece()
Definition piece.h:244
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.h:269
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const override
Definition piece.h:253
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.h:266
movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const override
Definition piece.h:259
movenum_t addMoves(bBasicBoard const &b, case_t const &cf, int8_t const ri, int8_t const ci, bMoveList &ml) const override
Definition piece.h:262
~bEmptyPiece() override
Definition piece.h:247
bool isAttacked(bBasicBoard const &b, case_t const &cf) const override
Definition piece.h:257
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, case_t const &ct) const override
Definition piece.h:250
bKing(piece_t p)
Definition piece.h:509
~bKing() override
Definition piece.h:512
bKnight(piece_t p)
Definition piece.h:361
~bKnight() override
Definition piece.h:364
bPawn(piece_t p)
Definition piece.h:280
~bPawn() override
Definition piece.h:283
virtual bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, case_t const &ct) const =0
constexpr bool isWhite() const
Definition piece.h:152
constexpr bool isEmpty() const
Definition piece.h:156
bPieceColour & operator=(bPieceColour const &)=delete
virtual ~bPieceColour()
Definition piece.h:143
bPieceColour(side_t s)
Definition piece.h:140
bPieceColour(bPieceColour const &)=delete
constexpr side_t toMove() const
Definition piece.h:160
bPieceColour(bPieceColour &&)=delete
virtual bool isAttacked(bBasicBoard const &b, case_t const &cf) const
Definition piece.h:163
side_t m_side
Definition piece.h:186
constexpr bool isBlack() const
Definition piece.h:154
virtual movenum_t addMoves(bBasicBoard const &b, case_t const &cf, int8_t const ri, int8_t const ci, bMoveList &ml) const =0
virtual bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const =0
constexpr side_t opponent() const
Definition piece.h:158
virtual movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const =0
static bool isAttackedBySlider(bBasicBoard const &b, case_t cf, column_t fromcol, rank_t fromrank, int8_t const ci, int8_t const ri, piece_t const cPiece, piece_t const cPiece2)
Class static function Return true if position is attacked by opponent respecting move offsets.
Definition piece.cpp:350
side_t invert()
Definition piece.h:165
bPieceColour & operator=(bPieceColour &&)=delete
bPiece & operator=(bPiece &&)=delete
static cpiece_t getPieceChar(piece_t const piece)
static class member function
Definition piece.cpp:219
virtual ~bPiece()
Definition piece.h:92
side_t toMove() const
Definition piece.cpp:209
static bPiece * getPieceClass(piece_t const piece)
static class member function
Definition piece.cpp:160
bPiece & operator=(bPiece const &)=delete
constexpr piece_t getPiece() const
Definition piece.h:101
bPiece(bPiece const &)=delete
friend std::ostream & operator<<(std::ostream &os, bPiece const &bp)
Definition piece.h:122
static bool isOpponent(side_t const s, piece_t const piece)
static class member function
Definition piece.cpp:231
static bool isOwnColour(side_t const s, piece_t const piece)
static class member function
Definition piece.cpp:239
static bool isBlackPiece(piece_t const p)
static class member function
Definition piece.cpp:254
static bool isWhitePiece(piece_t const p)
static class member function
Definition piece.cpp:247
virtual movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml)=0
bPiece(bPiece &&bp)
Definition piece.h:86
bPiece(piece_t piece)
Definition piece.h:89
virtual bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf)=0
bPiece()
Definition piece.h:84
static std::string getPieceStrUpper(piece_t const piece)
static class member function
Definition piece.cpp:173
bQueen(piece_t p)
Definition piece.h:472
~bQueen() override
Definition piece.h:475
~bRook() override
Definition piece.h:438
bRook(piece_t p)
Definition piece.h:435
~bWhiteBishop() override
Definition piece.h:410
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1119
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1101
bWhiteBishop()
Definition piece.h:407
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1227
~bWhiteKing() override
Definition piece.h:521
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1205
bWhiteKing()
Definition piece.h:518
bWhiteKnight()
Definition piece.h:370
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1077
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1059
~bWhiteKnight() override
Definition piece.h:373
bWhitePawn()
Definition piece.h:289
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const override
Check if pawn move could be added by just checking there is not check, case of possible promotion.
Definition piece.cpp:439
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:947
static movenum_t addCapturePromotionMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Test move is possible, single step move capture only move.
Definition piece.cpp:861
static movenum_t addNonCapturePromotionMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml)
Test move is possible, single step move non capture move.
Definition piece.cpp:833
static movenum_t addCapturePawnMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Definition piece.cpp:793
~bWhitePawn() override
Definition piece.h:292
static movenum_t addEPMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml)
Test move is possible, e.p.
Definition piece.cpp:902
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
check if there is at least one move possible currently, relies on full move generation for pawn
Definition piece.cpp:935
static movenum_t addNonCapturePawnMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml)
Class static function Test move is possible, single step move non capture move.
Definition piece.cpp:701
~bWhitePiece() override
Definition piece.h:200
movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const override
Check for in-check position, used for King and Knight.
Definition piece.cpp:551
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, case_t const &ct) const override
Check if any could be added by just checking there.
Definition piece.cpp:382
bool isAttacked(bBasicBoard const &b, case_t const &cf) const override
Check if piece on position is attacked, start with piece always on board and then with pieces with gr...
Definition piece.cpp:269
bWhitePiece()
Definition piece.h:197
movenum_t addMoves(bBasicBoard const &b, case_t const &cf, int8_t const ri, int8_t const ci, bMoveList &ml) const override
Add moves for Queen, Rook and Bishop.
Definition piece.cpp:585
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1145
bWhiteQueen()
Definition piece.h:481
~bWhiteQueen() override
Definition piece.h:484
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1171
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1015
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1033
bWhiteRook()
Definition piece.h:444
~bWhiteRook() override
Definition piece.h:447
enum tPPiece ppiece_t
Definition piece.h:52
enum tSide side_t
Definition piece.h:65
void bPiece_dtor()
Definition piece.cpp:150
tCPiece
Definition piece.h:19
@ C_W_KNIGHT
Definition piece.h:23
@ C_W_PAWN
Definition piece.h:24
@ C_B_QUEEN
Definition piece.h:31
@ C_W_ROOK
Definition piece.h:26
@ C_EMPTY
Definition piece.h:20
@ C_B_BISHOP
Definition piece.h:27
@ C_W_QUEEN
Definition piece.h:25
@ C_B_KNIGHT
Definition piece.h:29
@ C_B_PAWN
Definition piece.h:30
@ C_W_BISHOP
Definition piece.h:21
@ C_B_ROOK
Definition piece.h:32
@ C_B_KING
Definition piece.h:28
@ C_W_KING
Definition piece.h:22
tPiece
Definition piece.h:37
@ W_PAWN
Definition piece.h:39
@ W_KNIGHT
Definition piece.h:39
@ P_SIZE
Definition piece.h:41
@ B_BISHOP
Definition piece.h:40
@ W_ROOK
Definition piece.h:39
@ B_ROOK
Definition piece.h:40
@ W_QUEEN
Definition piece.h:39
@ B_KING
Definition piece.h:40
@ P_EMPTY
Definition piece.h:38
@ B_KNIGHT
Definition piece.h:40
@ W_KING
Definition piece.h:39
@ B_PAWN
Definition piece.h:40
@ B_QUEEN
Definition piece.h:40
@ W_BISHOP
Definition piece.h:39
enum tPiece piece_t
Definition piece.h:44
void bPiece_ctor()
Definition piece.cpp:46
enum tCPiece cpiece_t
Definition piece.h:35
tPPiece
Definition piece.h:46
@ N_P_SIZE
Definition piece.h:49
@ N_P_KNIGHT
Definition piece.h:48
@ N_P_QUEEN
Definition piece.h:48
@ N_P_ROOK
Definition piece.h:48
@ N_P_BISHOP
Definition piece.h:48
@ N_P_EMPTY
Definition piece.h:47
tStatPiece
Definition piece.h:54
@ STAT_KNIGHT
Definition piece.h:55
@ STAT_BISHOP
Definition piece.h:55
@ STAT_ROOK
Definition piece.h:55
@ STAT_SIZE
Definition piece.h:56
@ STAT_QUEEN
Definition piece.h:55
tSide
Definition piece.h:59
@ SIDE_BLACK
Definition piece.h:62
@ SIDE_WHITE
Definition piece.h:61
@ SIDE_UNDEFINED
Definition piece.h:60