0

Haskell で (hscurses を使用して) 小さな RL を作成しています。現在、ダンジョンを作成/印刷するためのコードを作成しています。

私が最初に行うことは、「壁」を使用してリスト/配列を作成することです
。python(v3) では、次のようになります。

def mk_list(x, y):        
    dungeon = [['#' for j in range(y)] for i in range(x)]

    return dungeon

そして、それは次のように印刷されます:

import curses
def print_dungeon(window, x, y, dungeon):
    for i in range(x):
        for j in range(y):
        window.addstr(j, i, dungeon[x][y])
    window.refresh()

私の質問は次のとおりです。haskellでこれを行うにはどうすればよいですか? モジュールが存在することは知っていますData.Arrayが、私が理解しているように、それらは 2D 配列のみをサポートしています。
また、後で部屋と廊下を「掘る」必要があるため、配列は変更可能でなければなりません。

しかし、私の質問は、配列を使用する必要があるか、それともリストの方が優れているかということです。

前もって感謝します!

4

1 に答える 1

2

Haskell は n 次元配列をサポートしています。

import Data.Array
import Data.Ix
import Control.Monad

main = do
  let myBounds = ((0,5,10),(7,8,12)) :: ((Int,Int,Int),(Int,Int,Int))
      threeDexample = array myBounds
                        [ (ijk, e) | ijk@(i,j,k) <- range myBounds,
                                     let e = i+j*10+k*100 ]

  forM_ (range myBounds) $ \ijk@(i,j,k) -> do
    putStrLn $ "value at " ++ show ijk ++ " = " ++ show (threeDexample ! ijk)

変異するには、操作を使用するData.Array.MArrayか使用し(//)ます。

于 2016-07-08T15:23:01.423 に答える