我正在重新編寫遊戲,我在Haskell問了一個問題「How can I iterate over a quadruple linked 2-dimensional grid of data as if it were a 2-dimensional array?」。如何將索引轉換爲可變數組並將其轉換爲Haskell中的狀態引用?
爲了首先創建數據網格,我使用了一個非常必要的樣式算法,如下所示。它依賴的關鍵特性是我可以將索引放入數組中並從中創建一個參考。例如,「& array [x] [y]」。
我需要能夠索引到一個可變數組中,並在Haskell中創建一個狀態引用。因此,該類型簽名可能是
convertToSTRef :: i -> STArray s i a -> ST s (STRef s a)
我已經看過的文件過來,都嘗試hoogle和hayoo,並沒有找到一種方法來做到這一點。
P.S.或者,如果有人使用了我可以使用的不同算法,那就太好了。
P.S.S.簡單的命令式算法。
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;
}
您是否需要在稍後的時間更改這些參考文獻指向的位置?如果沒有,則根本不需要存儲它們,而只需使用函數'sideBlock :: Direction - >(Int,Int) - > Maybe(Int,Int)'來代替。 – hammar 2012-04-18 21:13:50