0
게임에서 임의의 시간에 적을 생성하고 싶습니다. 는이를 위해 나는 각 프레임을 확인하고 싶었다 경우 임의의 값 [0..100] ==하스켈 난수 생성기
spawnEnemy :: World -> World
spawnEnemy ([email protected] { 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
(50) (여기 rndGen :: stdGen 원수 :: [적])
그러나 랜드 결코 50을 반환하지 않는 것 같습니다. 내가 여기서 무엇을 잘못하고 있니?
코드에 오타가 있습니다. 'rand 0 100 = 50'의'= '는'=='이어야합니다. – dkasak
당신은 지금 Rng를 스테핑하고 있습니까? –
0에서 100 사이의 무작위 부동 소수점은 거의 정확히 50이 될 수 없습니다. 1 %의 확률을 원한다면 대신 'r <= 1'을 확인하십시오. 또한 새로운 생성기를 버리면 rand 함수가 항상 같은 값을 반환합니다. –