Gloss ライブラリを使用して Haskell で倉庫番プログラムを作成しています。プレーヤーがレベルを破ったときに、テキスト ファイルから新しいレベルをロードして、プログラムを続行させたいところまで来ています。 .
Gloss の制限により、これに少し苦労していplay
ます。ゲームをセットアップして継続的に更新する機能は次のようになります。
play :: forall world
. Display -- ^ Display mode.
-> Color -- ^ Background color.
-> Int -- ^ Number of simulation steps to take for each second of real time.
-> world -- ^ The initial world.
-> (world -> Picture) -- ^ A function to convert the world a picture.
-> (Event -> world -> world) -- ^ A function to handle input events.
-> (Float -> world -> world) -- ^ A function to step the world one iteration.
-- It is passed the period of time (in seconds) needing to be advanced.
-> IO ()
world
私が使用しているタイプは次のとおりです。
data Game = Game
{ levelNumber :: Int,
currentLevel :: Level Square,
won :: Bool }
ここで、Level
s には現在のレベルのブロックが含まれます。私はGame
次のようなものを使用して s を読んでいます(実際にはまだ一般化されたものは作成していませんが、ファイル名引数を使用する場合は基本的にこれだけです):
startGame = do
lvl <- readFile "levels/level001.lvl"
let lvl' = parseLevel lvl
return $ Game 1 lvl' False
の更新機能が原因で、私の困難が生じていplay
ます。単一のレベルで操作している場合は、ファイル システムからデータを読み取る必要なく、簡単に を取得して(およびなど) をGame
生成できます。ゲーム、私は自分の sをすべて s にするのを避ける方法がわかりません。おそらく、これはこの状況では不可能であり、それには正当な理由があるのでしょうか? 私は常にファイルからプルされたものを操作しますが、それがいつでも回避できるかどうかはわかりません。回避できる場合は、避けたいと思います。Picture
Game
Game
IO Game
Game