0

私はopenglでパックマンゲームを作成しています.2つの異なる数字0または1を生成する必要があります。これは、パックマンが取っている方向に応じて、パックマンの方向に責任があります。

rand() 関数を使用して、一方の数値に対して 75% のランダム性を生成し、もう一方の数値に対して 25% のランダム性を生成する数値を生成するにはどうすればよいですか?

私が作る場合:

n = rand() % 3;

2 つの異なる番号を取得します。問題は、私が作る方法がわからないランダム性の割合です。シクルとカウンターで作れます。しかし、rand() 関数で直接実行できると言われました。検索しましたが、グーグルで具体的なものは何も見つかりませんでした。

4

3 に答える 3

3

ライブラリを使用し<random>ます。bernoulli_distribution は、指定された確率 p で true を生成し、確率 1-p で false を生成します。

#include <random>

#include <iostream>
#include <algorithm>
#include <iterator>

int main() {
    std::generate_n(std::ostream_iterator<bool>(std::cout," "), 10,
                    std::bind(std::bernoulli_distribution(0.25), std::mt19937()));
}

プリント:

1 0 0 1 0 0 1 0 0 0 
于 2012-05-05T15:42:34.433 に答える
2

aからまでのランダムな範囲を均等に分散してb、次のような値で条件を確認できます。

if((rand() % 100)>=75)
    // 25%
    ;
else
    // 75 %
    ;
于 2012-05-05T15:34:30.903 に答える
2

rand() は、0 から RAND_MAX (通常は 32k) までの乱数を返します。

したがって、値の半分は 0 と RAND_MAX/2 の間、1/3 は 0 と RAND_MAX/3 の間、2/3 は RAND_MAX/3 と RAND_MAX の間になります。

ヒントとしては十分ですか?

于 2012-05-05T15:29:48.003 に答える