gpt4 book ai didi

random - 如何在没有信号的情况下在 Elm 0.13 中获取随机数?

转载 作者:行者123 更新时间:2023-12-02 00:00:02 26 4
gpt4 key购买 nike

我正在制作一个游戏,我需要在屏幕上绘制随机线。现在看来 Random 需要一个信号才能在 0.13 中工作(我们被迫在 0.13 中工作)。那么如何获得这些随机数呢?

我从 elm-lang 网站提供的游戏框架开始,得到了这个:

type UserInput = { space : Bool, keys : [KeyCode] }
type Input = { timeDelta : Float, userInput : UserInput }

userInput : Signal UserInput
userInput = lift2 UserInput Keyboard.space Keyboard.keysDown

framesPerSecond = 30

delta : Signal Float
delta = lift (\t -> t / framesPerSecond) (Time.fps framesPerSecond)

input : Signal Input
input = Signal.sampleOn delta (Signal.lift2 Input delta userInput)

gameState : Signal GameState
gameState = Signal.foldp stepGame defaultGame input

stepGame : Input -> GameState -> GameState
stepGame i g =
if g.state == Start then *Get random floats*

现在在stepGame中,我想绘制随机线。问题是I can only get random floats by providing a signal in 0.13 。我的输入信号靠近步进函数,但是当我将标题更改为stepGame:信号输入 -> GameState -> GameState 它无法编译。那么我如何在该函数中获得信号来获取一些随机数...我似乎找不到解决方案,这让我发疯。

最佳答案

有两种方法可以做到这一点。这实际上取决于您需要的随机数数量是否是静态的。

静态随机数

使用 Random.floatList 中的随机数扩展您的输入:

type Input = { timeDelta : Float, userInput : UserInput, randoms : [Float] }

staticNoOfFloats = 42

input : Signal Input
input = Signal.sampleOn delta (Signal.lift3 Input delta userInput (Random.floatList (always staticNoOfFloats <~ delta)))

动态随机数

使用名为 also outlined in this SO answer 的社区库 ( generator ) 。您可以通过使用 Random.range 来使用随机种子,其方式与上面概述的方式大致相同。该库是一个纯伪随机数生成器,基于生成随机数和一个将生成下一个随机数的新生成器

为什么不在动态情况下使用Random.floatList

通常,如果您需要动态数量的随机数,则该数字取决于程序的当前状态。由于该状态是在 foldp 内捕获的,您还可以根据这些随机数进行更新,因此无法使用“信号函数”,即 Signal 类型的函数a -> 信号 b

关于random - 如何在没有信号的情况下在 Elm 0.13 中获取随机数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590231/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com