我正在重新编写我问过一个问题的游戏,“我怎样才能像二维数组一样迭代四联链接的二维数据网格? ”,在 Haskell 中。
为了首先创建数据网格,我使用了一种非常命令式的算法,如下所示。它依赖的关键特性是我可以将索引放入数组并从中创建引用。例如,“&array[x][y]”。
我需要能够将索引放入可变数组并在 Haskell 中对其进行状态引用。因此类型签名可能是
convertToSTRef :: i -> STArray s i a -> ST s (STRef s a)
我查看了文档,尝试了 hoogle 和 hayoo,但没有找到实现此目的的方法。
PS 或者,如果有人有我可以使用的不同算法,那就太好了。
PSS 简单的命令式算法。
const size_t rows = 20;
const size_t columns = 59;
block tiles[columns][rows];
block * const start = &tiles[columns/2][rows/2];
for (size_t x = 0; x < columns; ++x)
for (size_t y = 0; y < rows; ++y)
{
tiles[x][y].floor = '^';
tiles[x][y].inhabitant = WALL;
tiles[x][y].side_block[EAST] = (x + 1 < columns) ? &tiles[x + 1][y] : NULL;
tiles[x][y].side_block[SOUTH] = (y + 1 < rows) ? &tiles[x][y + 1] : NULL;
tiles[x][y].side_block[WEST] = (x > 0) ? &tiles[x - 1][y] : NULL;
tiles[x][y].side_block[NORTH] = (y > 0) ? &tiles[x][y - 1] : NULL;
}