que prefieren evitar el uso de punteros que usted tiene que recordar a limpiarlos.
Este diseño utiliza el patrón de estrategia. La interfaz es PieceType
, que le permite mostrar posiciones válidas en un tablero, o mostrar las posiciones iniciales en el tablero.Estoy seguro de que hay más le gustaría que cada estrategia que sea capaz de hacer:
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
{
// ...
};
//...
tan solo hay uno de cada PieceType
, y como ese tipo se comparte a través de piezas de ajedrez, también puede ser const:
const Pawn PAWN;
const Rook ROOK;
const Knight KNIGHT;
utilizamos estas estrategias para inicializar el ajedrez tenemos en un vector:
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;
};
voy a envolver el código para añadir un ChessMan
a un vector en su propia función :
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);
//...
}
Bonne chance!
las estructuras son generalmente para c, C++ le da clases y OOP, así que me apegaré a eso ya que es nuevo en c/C++. – L7ColWinters
@ L7ColWinters: ¿Por qué las estructuras no son OOP? ¿Por qué deberías usar clases en su lugar? –
@ L7ColWinters: Esa es una declaración extraña. 'struct' y' clase' son casi idénticos. – EboMike