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