, , .
. PieceType, . , , :
class Board;
class PieceType
{
public:
virtual showValidMoves(Board& board) const = 0;
virtual showInitialPosition(Board& board) const = 0;
};
class Pawn : public PieceType
{
public:
virtual showValidMoves(Board& board) const;
virtual showInitialPosition(Board& board) const;
};
class Rook : public PieceType
{
};
PieceType, , const:
const Pawn PAWN;
const Rook ROOK;
const Knight KNIGHT;
, :
class ChessMan
{
public:
enum Colour {Black, White};
ChessMan(const Colour& colour, PieceType& pieceType);
void showValidMoves(Board& board);
void showInitialPosition(Board& board);
private:
Colour m_colour;
PieceType& m_pieceType;
};
ChessMan :
void add(vector<ChessMan>& chessmen,
const ChessMan::Colour& colour,
const PieceType& pieceType,
const unsigned int amount)
{
chessmen.insert(chessmen.end(), ChessMan(colour, pieceType), amount);
}
void main()
{
using std::vector;
vector<ChessMan> chessmen;
add(chessmen, 16, ChessMan::Black, PAWN);
add(chessmen, 2, ChessMan::Black, ROOK);
add(chessmen, 2, ChessMan::Black, KNIGHT);
}
!