#include <iostream>
using namespace std;
class Board;
class Piece
{
public:
Piece(bool w, string t) : _type(t),_isWhite(w) {}
Piece() {}
Piece(Piece & other) : _type(other._type), _isWhite(other._isWhite) {}
bool isChass(bool, Board*) { return false; }
virtual int move(int x_src, int y_src, int x_dst, int y_dst, Board* board)=0;
virtual ~Piece() {}
bool get_isWhite() {return _isWhite;}
string get_type() {return _type; }
Piece& operator= (const Piece & other) { _type=other._type; _isWhite=other._isWhite;}
bool inRange(int, int) { return true; }
protected:
bool _isWhite;
string _type;
};
class Blank : public Piece {
public:
Blank() {}
int move(int x_src, int y_src, int x_dst, int y_dst, Board* board) override {
return 0;
}
};
class Board
{
public:
Board();
Board(const Board& other);
~Board();
Board& operator=(const Board &other);
Piece& getPiece(int i, int j){ return *_board[i][j]; }
void game();
void deletePiece(int x, int y) { delete _board[x][y]; }
void allocateBlankPiece(int x, int y) { _board[x][y] = new Blank(); }
private:
Piece*** _board;
bool _isWhiteTurn;
};
int main() {
// your code goes here
return 0;
}