为了更好地学习Haskell,我试图基本上构建一个着名的独立游戏Super Hexagon的变体。
但是我对级别生成有问题:
现在,通过列出包含所有不同"手套的列表来完成关卡生成" (墙的模式,实现为[[Bool]]
,行数可变,每行包含True
或False
;这些是关卡的基石。使用getStdGen()数字生成器,我能够创建无限的手套列表。
然而,在一次,我们只想渲染其中的一部分。为了跟踪是否已经传递过长手套,引入了第二个参数,其中包含在此之前所有手套的行数之和。 (例如,length (gauntletData currentRandomNumber) + snd $ randomGauntletList !! (n-1)
,其中randomGauntletList
的类型为[(Gauntlet,Integer)]
问题在于如何在渲染函数和更新函数中使用此列表:take 30 $ dropWhile (\(_,distance) -> currentDistance > distance) randomGauntletList
dropWhile
导致程序花费的时间越来越长,以返回当前的起点'列表,因此在+ - 30秒后减慢游戏速度。
我的深度:我有办法解决这个问题吗?