我正在编写一个棋盘游戏,其中棋盘是一个二维矢量,其中包含一个Square
对象,而Square
中则包含一个Piece
。使用嵌套的for循环,我正在8x8向量的每个插槽中初始化一个新的Square
对象-但是,当我向一个Piece
添加Square
时,它会添加一个{{ 1}}到每个Piece
。我认为,即使我每次都初始化一个新的Square
,向量中的每个插槽也都只指向一个Square
。
我已经尝试过使用Square
对象的二维向量以及Square
指针的向量。目前,我正在使用指针向量:Square
vector<vector<Square*>> _board;
在另一个名为 // initializing an empty board
_board = {{},{},{},{},{},{},{},{}};
// adding a new Square to each of the 8x8 slots
string colorAlternator = WHITE;
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 8; j++) {
_board[i].push_back(new Square(colorAlternator, make_tuple(i,j)));
if (colorAlternator == WHITE) {
colorAlternator = BLACK;
} else {
colorAlternator = WHITE;
}
}
}
// placing a piece
/* placePiece() is a function of Square
* (p2Pieces.at(0) is a piece being pulled from elsewhere)
*/
_board[0][1]->placePiece(*p2Pieces.at(0));
的函数中,它打印出电路板的可视化图像(不好意思的实现,很快将通过for循环进行修复!):
view()
这应该将每个for (int i = 7; i >= 0; i--)
{
cout << BORDER << endl;
cout << i + 1 << " " << "| "
<< board[i][0]->displayToken() << " | "
<< board[i][1]->displayToken() << " | "
<< board[i][2]->displayToken() << " | "
<< board[i][3]->displayToken() << " | "
<< board[i][4]->displayToken() << " | "
<< board[i][5]->displayToken() << " | "
<< board[i][6]->displayToken() << " | "
<< board[i][7]->displayToken() << " | " << i + 1 << endl;
}
都打印为空白,除了我将Square
放入其中的那个之外-但它会将每个Piece
打印为包含我刚刚的Square
添加。
有什么想法导致向量中的每个广告位链接到相同的Piece
? (或者甚至是正在发生什么?)
更新:这是Square
,placePiece()
和类displayToken()
中支持方法containsPiece()
的实现:
Square