Haskell随机数发生器

时间:2016-10-29 16:25:44

标签: haskell random

我想在游戏中随机产生一个敌人。 为此,我想检查每个帧是否有随机值[0..100] == 50

spawnEnemy :: World -> World
spawnEnemy (world@World { rndGen = r, enemies = e }) = world { enemies = if rand 0 100 == 50 then Enemy (rand (-200) 200, rand (-200) 200) 0 0 : e else e }
    where
        rand :: Float -> Float -> Float
        rand l h = fst $ randomR (l, h) r

(这里是rndGen :: stdGen和敌人:: [Enemy])

但兰特似乎永远不会回归50。 我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

将随机Float等于50的几率非常低,因为Floats不一定是整数。首先尝试使用floor将随机数转换为积分。