コーディングの課題の一環として、ダンジョン マップを実装する必要があります。
Data.Map
マップを印刷する必要がなく、障害物が破壊されたときなどにマップ タイルを更新する必要があったため、デザインの選択肢として使用して既にデザインしました。
type Dungeon = Map Pos Tile
type Pos = (Int,Int) -- cartesian coordinates
data Tile = Wall | Destroyable | ...
しかし、それも印刷しなければならない場合はどうすればよいでしょうか
。その場合elaboratePrint . sort $ fromList dungeon
、whereelaboratePrint
が改行を処理し、タイルセットから素敵な Unicode シンボルを作成するようなものを使用する必要があります。
私が検討した別の選択肢は、ネストされたリストです
type Dungeon = [[Tile]]
これには、そのようなデータ構造の単一の要素を更新するのが難しいという欠点があります。しかし、その場合、印刷は単純なワンライナーになりunlines . map show
ます。
私が検討した別の構造は でしArray
たが、私は配列に慣れていないので、ハック ドキュメントを一目見ただけでわかりました - インデックスを操作するマップ関数と要素を操作するマップ関数しか見つかりませんでした。要素は一見簡単ではありません。また、配列の印刷も、それを迅速かつ簡単に行う方法が明確ではありません。
さて、私の質問は、簡単に印刷でき、単一要素を簡単に更新できるという特性を持つ、ダンジョン マップを表現するためのより優れたデータ構造があるかどうかです。