0

これまでのところ、5 つのコミュニティ カード (すべて ints) を作成する簡単なプログラムがあります。私はこれらを設定することができました(そして、それらはグローバル変数であり、それは意図的なものです)が、プログラムを実行するたびに同じ番号が作成されます。以下はコードです。

int communityCards[5];
int playerCards[2];
int opponentCards[2];
int communityValues[5];
int playerValues[2];
int opponentValues[2];

int main(int argc, const char * argv[]) {
    for (int i = 0; i < 9; i++) {
        if (i < 5) {
            communityCards[i] = rand() % 52 - i;
            for (int a = 0; communityCards[a]!=0; a++) {
                communityCards[i]==communityCards[a]?communityCards[i]++: a = a;
            }
        }
        printf("%i ", communityCards[i]);
    }
}
4

3 に答える 3

3

srand(time(NULL));の冒頭で 1 回呼び出したいとしますmain

余談ですが、残りのロジックはおそらく間違っているようです。特に、今のところ、(たとえば) コミュニティ カードとして 5 つのエースを配ることができるように見えます (または、ループ/条件はそれを修正するためのものですか?)

通常、デッキをいっぱいにしてシャッフルしstd::random_shuffle、そこからカードをコミュニティ、プレイヤー、対戦相手の手札に移動します。

于 2013-06-04T23:05:06.477 に答える
3

srandを呼び出す前に、適切なシードで一度だけ使用してくださいrand。通常、srand(time(0))使用されます。

別の方法として、C++11 は、きめの細かい仕様を備えたはるかに優れた乱数ジェネレーターrandを多数提供しています (基本的に、生成される数値の品質に関する保証はありません)。

于 2013-06-04T23:05:24.420 に答える
2

プログラムの最初に func を記述srandします。シードとして現在の時間がかかります

int main()
{
    srand(time(0));

    // STUFF
}
于 2013-06-04T23:05:40.393 に答える