Belofte version 2.1.9
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 const 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;
172 virtual bool canMovePreflightCheck(bBasicBoard& b, case_t const& cf,
173 int8_t const ri, int8_t const ci,
174 uint_fast8_t nMax) const = 0;
175 virtual bool canPawnMovePreflightCheck(bBasicBoard& b, case_t const& cf,
176 int8_t const ri, int8_t const ci) const = 0;
177 virtual movenum_t addMove(bBasicBoard const& b, case_t const& cf,
178 case_t const& ct, bMoveList& ml) const = 0;
179 virtual movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
180 int8_t const ri, int8_t const ci,
181 bMoveList& ml) const = 0;
182
183protected:
184 bool isAttackedBySlider(bBasicBoard const& b,
185 case_t cf, column_t fromcol, rank_t fromrank,
186 int8_t const ci, int8_t const ri,
187 piece_t const cPiece, piece_t const cPiece2) const;
188
190};
191
192#if defined(__GNUC__)
193#pragma GCC diagnostic pop
194#endif
195
196//-----------------------------------------------------------------------
197
198class bWhitePiece : public bPieceColour {
199public:
203 ~bWhitePiece() override
204 {}
205
207 case_t const& cf, case_t const& ct) const override;
208 bool canMovePreflightCheck(bBasicBoard& b, case_t const& cf,
209 int8_t const ri, int8_t const ci,
210 uint_fast8_t nMax = 1) const override;
212 int8_t const ri, int8_t const ci) const override;
213 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override;
214 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
215 case_t const& ct, bMoveList& ml) const override;
216 movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
217 int8_t const ri, int8_t const ci,
218 bMoveList& ml) const override;
219};
220
221class bBlackPiece : public bPieceColour {
222public:
226 ~bBlackPiece() override
227 {}
228
230 case_t const& cf, case_t const& ct) const override;
231 bool canMovePreflightCheck(bBasicBoard& b, case_t const& cf,
232 int8_t const ri, int8_t const ci,
233 uint_fast8_t nMax = 1) const override;
235 int8_t const ri, int8_t const ci) const override;
236 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override;
237 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
238 case_t const& ct, bMoveList& ml) const override;
239 movenum_t addMoves(bBasicBoard const& b, case_t const& cf,
240 int8_t const ri, int8_t const ci,
241 bMoveList& ml) const override;
242};
243
244#if defined(__GNUC__)
245#pragma GCC diagnostic push
246#pragma GCC diagnostic ignored "-Wunused-parameter"
247#endif
248
249/// @todo Candidate for template implementation
250
251class bEmptyPiece : public bPiece, public bPieceColour {
252public:
256 ~bEmptyPiece() override
257 {}
258
260 case_t const& cf, case_t const& ct) const override
261 { return false; }
263 case_t const& cf,
264 int8_t const ri, int8_t const ci,
265 uint_fast8_t nMax = 0) const override
266 { return false; }
268 case_t const& cf,
269 int8_t const ri, int8_t const ci) const override
270 { return false; }
271 bool isAttacked(bBasicBoard const& b, case_t const& cf) const override
272 { return false; }
273 movenum_t addMove(bBasicBoard const& b, case_t const& cf,
274 case_t const& ct, bMoveList& ml) const override
275 { return 0; }
277 int8_t const ri, int8_t const ci,
278 bMoveList& ml) const override
279 { return 0; }
281 case_t const& cf) override
282 { return false; }
284 case_t const& cf, bMoveList& ml) override
285 { return 0; }
286};
287
288#if defined(__GNUC__)
289#pragma GCC diagnostic pop
290#endif
291
292class bPawn : public bPiece {
293public:
294 explicit bPawn(piece_t p)
295 : bPiece(p)
296 {}
297 ~bPawn() override
298 {}
299};
300
301class bWhitePawn : public bPawn, public bWhitePiece {
302public:
303 explicit bWhitePawn()
305 {}
306 ~bWhitePawn() override
307 {}
308
310 case_t const& cf) override;
311 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
312 bMoveList& ml) override;
313
314protected:
316 bMoveList& ml) const;
317 movenum_t addEPMove(bBasicBoard const& b, case_t const& cf,
318 int8_t const ci, bMoveList& ml) const;
320 int8_t const ci, bMoveList& ml) const;
322 bMoveList& ml) const;
324 int8_t const ci, bMoveList& ml) const;
325
326private:
327 bool canPawnMove(bBasicBoard& b, case_t const& cf) const;
328 bool canPawnCapture(bBasicBoard& b, case_t const& cf,
329 int8_t const ci) const;
330 bool canPawnEPMove(bBasicBoard& b, case_t const& cf,
331 int8_t const ci) const;
332};
333
334class bBlackPawn : public bPawn, public bBlackPiece {
335public:
336 explicit bBlackPawn()
338 {}
339 ~bBlackPawn() override
340 {}
341
343 case_t const& cf) override;
344 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
345 bMoveList& ml) override;
346
347protected:
349 bMoveList& ml) const;
350 movenum_t addEPMove(bBasicBoard const& b, case_t const& cf,
351 int8_t const ci, bMoveList& ml) const;
353 int8_t const ci, bMoveList& ml) const;
355 bMoveList& ml) const;
357 int8_t const ci, bMoveList& ml) const;
358
359private:
360 bool canPawnMove(bBasicBoard& b, case_t const& cf) const;
361 bool canPawnCapture(bBasicBoard& b, case_t const& cf,
362 int8_t const ci) const;
363 bool canPawnEPMove(bBasicBoard& b, case_t const& cf,
364 int8_t const ci) const;
365};
366
367class bKnight : public bPiece {
368public:
369 explicit bKnight(piece_t p)
370 : bPiece(p)
371 {}
372 ~bKnight() override
373 {}
374};
375
376class bWhiteKnight : public bKnight, public bWhitePiece {
377public:
381 ~bWhiteKnight() override
382 {}
383
385 case_t const& cf) override;
386 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
387 bMoveList& ml) override;
388};
389
390class bBlackKnight : public bKnight, public bBlackPiece {
391public:
395 ~bBlackKnight() override
396 {}
397
399 case_t const& cf) override;
400 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
401 bMoveList& ml) override;
402};
403
404class bBishop : public bPiece {
405public:
406 explicit bBishop(piece_t p)
407 : bPiece(p)
408 {}
409 ~bBishop() override
410 {}
411};
412
413class bWhiteBishop : public bBishop, public bWhitePiece {
414public:
418 ~bWhiteBishop() override
419 {}
420
422 case_t const& cf) override;
423 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
424 bMoveList& ml) override;
425};
426
427class bBlackBishop : public bBishop, public bBlackPiece {
428public:
432 ~bBlackBishop() override
433 {}
434
436 case_t const& cf) override;
437 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
438 bMoveList& ml) override;
439};
440
441class bRook : public bPiece {
442public:
443 explicit bRook(piece_t p)
444 : bPiece(p)
445 {}
446 ~bRook() override
447 {}
448};
449
450class bWhiteRook : public bRook, public bWhitePiece {
451public:
454 {}
455 ~bWhiteRook() override
456 {}
457
459 case_t const& cf) override;
460 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
461 bMoveList& ml) override;
462};
463
464class bBlackRook : public bRook, public bBlackPiece {
465public:
468 {}
469 ~bBlackRook() override
470 {}
471
473 case_t const& cf) override;
474 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
475 bMoveList& ml) override;
476};
477
478class bQueen : public bPiece {
479public:
480 explicit bQueen(piece_t p)
481 : bPiece(p)
482 {}
483 ~bQueen() override
484 {}
485};
486
487class bWhiteQueen : public bQueen, public bWhitePiece {
488public:
492 ~bWhiteQueen() override
493 {}
494
496 case_t const& cf) override;
497 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
498 bMoveList& ml) override;
499};
500
501class bBlackQueen : public bQueen, public bBlackPiece {
502public:
506 ~bBlackQueen() override
507 {}
508
510 case_t const& cf) override;
511 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
512 bMoveList& ml) override;
513};
514
515class bKing : public bPiece {
516public:
517 explicit bKing(piece_t p)
518 : bPiece(p)
519 {}
520 ~bKing() override
521 {}
522};
523
524class bWhiteKing : public bKing, public bWhitePiece {
525public:
528 {}
529 ~bWhiteKing() override
530 {}
531
533 case_t const& cf) override;
534 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
535 bMoveList& ml) override;
536};
537
538class bBlackKing : public bKing, public bBlackPiece {
539public:
542 {}
543 ~bBlackKing() override
544 {}
545
547 case_t const& cf) override;
548 movenum_t GenerateMoves(bBasicBoard const& b, case_t const& cf,
549 bMoveList& ml) override;
550};
551
552// --------------------------------------------------------------------
553
554#endif // defined PIECE_H
555
556// eof
int8_t rank_t
Definition belofte.h:94
int8_t column_t
Definition belofte.h:95
uint_fast8_t movenum_t
Definition belofte.h:100
uint8_t case_t
Definition belofte.h:96
bBishop(piece_t p)
Definition piece.h:406
~bBishop() override
Definition piece.h:409
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1109
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1131
~bBlackBishop() override
Definition piece.h:432
bBlackBishop()
Definition piece.h:429
~bBlackKing() override
Definition piece.h:543
bBlackKing()
Definition piece.h:540
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1269
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1215
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1088
~bBlackKnight() override
Definition piece.h:395
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1067
bBlackKnight()
Definition piece.h:392
~bBlackPawn() override
Definition piece.h:339
bBlackPawn()
Definition piece.h:336
movenum_t addEPMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Test move is possible, e.p.
Definition piece.cpp:918
movenum_t addNonCapturePawnMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml) const
Test move is possible, single step move non capture move.
Definition piece.cpp:772
movenum_t addCapturePawnMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Definition piece.cpp:810
movenum_t addCapturePromotionMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Definition piece.cpp:878
movenum_t addNonCapturePromotionMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml) const
Definition piece.cpp:844
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:988
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:976
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:223
bool isAttacked(bBasicBoard const &b, case_t const &cf) const override
Definition piece.cpp:303
~bBlackPiece() override
Definition piece.h:226
bool canPawnMovePreflightCheck(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:525
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:618
movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const override
Definition piece.cpp:567
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1187
bBlackQueen()
Definition piece.h:503
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1157
~bBlackQueen() override
Definition piece.h:506
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1045
bBlackRook()
Definition piece.h:466
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1023
~bBlackRook() override
Definition piece.h:469
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:253
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.h:283
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.h:280
movenum_t addMove(bBasicBoard const &b, case_t const &cf, case_t const &ct, bMoveList &ml) const override
Definition piece.h:273
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:276
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci, uint_fast8_t nMax=0) const override
Definition piece.h:262
~bEmptyPiece() override
Definition piece.h:256
bool canPawnMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const override
Definition piece.h:267
bool isAttacked(bBasicBoard const &b, case_t const &cf) const override
Definition piece.h:271
bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, case_t const &ct) const override
Definition piece.h:259
bKing(piece_t p)
Definition piece.h:517
~bKing() override
Definition piece.h:520
bKnight(piece_t p)
Definition piece.h:369
~bKnight() override
Definition piece.h:372
bPawn(piece_t p)
Definition piece.h:294
~bPawn() override
Definition piece.h:297
virtual bool canPawnMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci) const =0
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
virtual bool canMovePreflightCheck(bBasicBoard &b, case_t const &cf, int8_t const ri, int8_t const ci, uint_fast8_t nMax) const =0
side_t m_side
Definition piece.h:189
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
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
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) const
Return true if position is attacked by opponent respecting move offsets.
Definition piece.cpp:349
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 const std::string getPieceStrUpper(piece_t const piece)
static class member function
Definition piece.cpp:173
bQueen(piece_t p)
Definition piece.h:480
~bQueen() override
Definition piece.h:483
~bRook() override
Definition piece.h:446
bRook(piece_t p)
Definition piece.h:443
~bWhiteBishop() override
Definition piece.h:418
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1118
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1100
bWhiteBishop()
Definition piece.h:415
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1226
~bWhiteKing() override
Definition piece.h:529
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1204
bWhiteKing()
Definition piece.h:526
bWhiteKnight()
Definition piece.h:378
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1076
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1058
~bWhiteKnight() override
Definition piece.h:381
bWhitePawn()
Definition piece.h:303
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:946
movenum_t addNonCapturePawnMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml) const
Test move is possible, single step move non capture move.
Definition piece.cpp:701
movenum_t addCapturePromotionMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Test move is possible, single step move capture only move.
Definition piece.cpp:860
movenum_t addCapturePawnMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Definition piece.cpp:792
movenum_t addEPMove(bBasicBoard const &b, case_t const &cf, int8_t const ci, bMoveList &ml) const
Test move is possible, e.p.
Definition piece.cpp:901
~bWhitePawn() override
Definition piece.h:306
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:934
movenum_t addNonCapturePromotionMove(bBasicBoard const &b, case_t const &cf, bMoveList &ml) const
Test move is possible, single step move non capture move.
Definition piece.cpp:832
bool canPawnMovePreflightCheck(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
~bWhitePiece() override
Definition piece.h:203
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:552
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:381
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:200
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:586
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1144
bWhiteQueen()
Definition piece.h:489
~bWhiteQueen() override
Definition piece.h:492
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1170
bool hasValidMovePreflightCheck(bBasicBoard &b, case_t const &cf) override
Definition piece.cpp:1014
movenum_t GenerateMoves(bBasicBoard const &b, case_t const &cf, bMoveList &ml) override
Definition piece.cpp:1032
bWhiteRook()
Definition piece.h:452
~bWhiteRook() override
Definition piece.h:455
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