ランダムなBOOLを効率的な方法でcocos2d

Steffenの投稿によれば、これはcocos2dでランダムな BOOL を生成する効率的な方法です

+(BOOL) getYesOrNo
{
   return (CCRANDOM_0_1() < 0.5f);
}

これの範囲をどのように設定するのですか? BOOL = YES

8

2 答え

次のようなことができます:

+(BOOL) getYesOrNo
{
    int tmp = (arc4random() % 30)+1;
    if(tmp % 5 == 0)
        return YES;
    return NO;
}
14
追加された
これにはモジュロバイアスがあります。
追加された 著者 Alexander,
この解決策は、真の値よりも偽の値を生成します。偽の値の場合は1:10のようになります。なぜなら、5,10,15,20,25,30の割合が6/30になるからです。
追加された 著者 Ali Omari,

乱数ジェネレータには arc4random を使用する必要があります。

#include 

     u_int32_t
     arc4random(void);

The arc4random() function uses the key stream generator employed by the arc4 cipher, which uses 8*8 8 bit S-Boxes. The S-Boxes can be in about (2*1700) states. The arc4random() function returns pseudo- random numbers in the range of 0 to (2*32)-1, and therefore has twice the range of rand and random.

-(BOOL)foo4random
{
u_int32_t randomNumber = (arc4random() % ((unsigned)RAND_MAX + 1));
if(randomNumber % 5 ==0)
    return YES;
return NO;

}

arc4random 型の詳細については、

man arc4random

オンターミナル。

3
追加された
arc4random_uniform を使用すると、ホイールを改造するのではなく、モジュロバイアスを防ぐことができます
追加された 著者 Alexander,