C ++ 2D数组网格和指针

时间:2014-05-20 07:33:58

标签: c++ arrays pointers grid multidimensional-array

我有一个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]并且应该具有southeast连接,但事实并非如此。当我生成[2][1]时,它确实有west个连接,但没有southeast。这是因为在创建这些瓷砖时不存在瓷砖..

我正在考虑使用指针,所以当生成tile时,它仍将被指向(如果不是,它将只是NULL),但这些指针正在我的脑袋里。

有人发现导致问题的上述代码有任何明显的缺陷吗?好像我错过了一些与指针有关的重要内容。

感谢。

0 个答案:

没有答案