57 lines
1.9 KiB
C++
57 lines
1.9 KiB
C++
#ifndef ChessPiece_H
|
|
#define ChessPiece_H
|
|
|
|
#include <stdexcept>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <set>
|
|
#include "../ChessPieces/ChessPieceColor.hpp"
|
|
#include "../ChessPieces/ChessPiecePosition.hpp"
|
|
#include "../Chessboard/Chessboard.hpp"
|
|
|
|
class ChessPiece {
|
|
private:
|
|
ChessPieceColor _color;
|
|
std::vector<ChessPiecePosition> _positions;
|
|
std::set<ChessPiecePosition> _positions_next;
|
|
|
|
protected:
|
|
char _char = '\0';
|
|
std::pair<std::string, std::string> _unicode;
|
|
const char _CHAR_BISHOP = 'B';
|
|
const char _CHAR_KING = 'K';
|
|
const char _CHAR_KNIGHT = 'N';
|
|
const char _CHAR_PAWN = 'P';
|
|
const char _CHAR_QUEEN = 'Q';
|
|
const char _CHAR_ROOK = 'R';
|
|
ChessPiece(ChessPieceColor color, ChessPiecePosition position);
|
|
std::set<ChessPiecePosition> GetDiagonalPositions(Chessboard* chessboard, std::set<ChessPiecePosition> ignore = {});
|
|
std::set<ChessPiecePosition> GetFilePositions(Chessboard* chessboard, std::set<ChessPiecePosition> ignore = {});
|
|
std::set<ChessPiecePosition> GetRankPositions(Chessboard* chessboard, std::set<ChessPiecePosition> ignore = {});
|
|
void SetColor(ChessPieceColor color);
|
|
void SetNextPositions(std::set<ChessPiecePosition> positions);
|
|
|
|
public:
|
|
ChessPiece() = default;
|
|
char GetChar();
|
|
ChessPieceColor GetColor();
|
|
std::set<ChessPiecePosition> GetNextPositions();
|
|
virtual std::set<ChessPiecePosition> GetNextPositions(Chessboard* chessboard, std::set<ChessPiecePosition> ignore = {}) = 0;
|
|
int GetNumberOfMoves();
|
|
ChessPiecePosition GetPosition();
|
|
std::string GetUnicode();
|
|
std::string GetUnicode(ChessPieceColor color);
|
|
bool IsBishop();
|
|
bool IsFirstMove();
|
|
bool IsKing();
|
|
bool IsKnight();
|
|
bool IsPawn();
|
|
bool IsProtective(Chessboard* chessboard);
|
|
bool IsQueen();
|
|
bool IsRook();
|
|
void SetPosition(ChessPiecePosition position);
|
|
void UpdateNextPositions(Chessboard* chessboard);
|
|
};
|
|
|
|
#endif
|