2016-10-29 2 views
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을 반환하지 않는 것 같습니다. 내가 여기서 무엇을 잘못하고 있니?

+0

코드에 오타가 있습니다. 'rand 0 100 = 50'의'= '는'=='이어야합니다. – dkasak

+1

당신은 지금 Rng를 스테핑하고 있습니까? –

+1

0에서 100 사이의 무작위 부동 소수점은 거의 정확히 50이 될 수 없습니다. 1 %의 확률을 원한다면 대신 'r <= 1'을 확인하십시오. 또한 새로운 생성기를 버리면 rand 함수가 항상 같은 값을 반환합니다. –

답변

0

수레가 반드시 정수가 아니기 때문에 임의의 수레가 50이 될 확률은 매우 낮습니다. floor을 사용하여 난수를 Integral로 먼저 변환 해보십시오.