我有一个2D数组作为游戏板的网格:
shared_ptr<Tile> grid[20][10] // 20x10 grid
我想用构造函数中的邻居初始化网格中的每个Tile:
/* Generate 20x10 (connected) tiles */
for (int x = 0; x < 20; x++) {
for (int y = 0; y < 10; y++) {
grid[x][y] = shared_ptr<Tile>(new Tile(x, y, room));
}
}
在Tile
:
Tile::Tile(int x, int y, shared_ptr<Tile> grid[][10]) {
/* Connected rooms */
shared_ptr<Tile> north;
shared_ptr<Tile> south;
shared_ptr<Tile> east;
shared_ptr<Tile> west;
/* North */
if (y > 0) {
north = shared_ptr<Tile>(grid[x][y - 1]);
}
/* South */
if (y < Y_TILES - 1) {
south = shared_ptr<Tile>(grid[x][y + 1]);
}
/* East */
if (x > 0) {
east = shared_ptr<Tile>(grid[x - 1][y]);
}
/* West */
if (x < X_TILES - 1) {
west = shared_ptr<Tile>(grid[x + 1][y]);
}
....
};
但正如您所料,当我生成20x10图块时,它们只与已生成的图块有连接!
例如,我生成[1][1]
并且应该具有south
和east
连接,但事实并非如此。当我生成[2][1]
时,它确实有west
个连接,但没有south
或east
。这是因为在创建这些瓷砖时不存在瓷砖..
我正在考虑使用指针,所以当生成tile时,它仍将被指向(如果不是,它将只是NULL
),但这些指针正在我的脑袋里。
有人发现导致问题的上述代码有任何明显的缺陷吗?好像我错过了一些与指针有关的重要内容。
感谢。