Я пытаюсь построить шахматную доску шахматных фигур. Я получил это
class ChessPiece
{
public:
ChessPiece();
virtual ~ChessPiece();
virtual bool movePiece() = 0;
};
и этот класс
class Pawn: public ChessPiece
{
public:
Pawn();
virtual ~Pawn();
bool movePiece();
};
в моем основном я пытаюсь создать 2-мерный массив ChessPiece, но потому, что он абстрактный, что дает мне проблемы.
Я попробовал это
ChessPiece** board = new ChessPiece[8][8];
или
ChessPiece*** board = new ChessPiece*[8];
но это не похоже на работу.. любая помощь будет очень благодарна Спасибо!
Ваша доска должна содержать указатели на ChessPiece
с каждой частью, выделенной отдельно. Доска всегда 8x8, поэтому нет причин выделять ее new
. Вместо:
ChessPiece * board[8][8];
Тогда что-то вроде:
for (int i = 0; i < 8; ++i) {
board[1][i] = new Pawn();
}
board[0][0] = new Rook();
board[0][1] = new Knight();
// etc...
(EDIT: удаленная реализация с использованием массивов фиксированного размера для каждого типа штук, поскольку пешки могут быть продвинуты на другие типы штук).
Конечно, вы можете упорядочить данные по-разному. Вероятно, вы должны сгруппировать все данные игры в класс или структуру ChessGame
. Вы можете написать класс PlayerPieces
содержащий только одну часть игрока, а затем поместить 2 из них в ChessGame
. Есть много возможностей - в конечном счете это зависит от вашего собственного стиля и предпочтений.
new
не выделяет память для этого? Что произойдет, если я отправлю свою доску в другую функцию? Он будет удален, когда объем закончится?
ChessPiece*** board = new ChessPiece*[8];
Ура, теперь вы 3-звездный программист. Congrats!