2016-04-11 9 views
-2

どちらのプレイヤーも同じ乱数を得る!私はそれぞれのプレイヤーがサイコロを投げているので、別の番号を取得したい。どのようにして各プレーヤーに異なる乱数を生成できますか?

#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 

int roll_a_dice(void); 

int main(int argc, const char *argv[]) 
{ 
    int flag; 
    int answer1 = roll_a_dice(); 
    int answer2 = roll_a_dice(); 

    printf("Die 1 (rolled by player 1): %d\n", answer1); 
    printf("Die 2 (rolled by player 2): %d\n", answer2); 

    if (answer1>answer2) { 
     printf("Player 1 is starting!\n"); 
     flag = 1; 
    } else { 
     printf("Player 2 is starting!\n"); 
     flag = 2; 
    } 

    printf("Goodbye!\n"); 

    return 0;   
} 

int roll_a_dice(void) 
{ 
    int r; 

    srand(time(NULL)); 
    r = 1 + rand() % 6; 

    return r; 
} 

プレイヤーがサイコロを投げている: はここのコードです。したがって、数字は1〜6でなければなりません。 これを修正するにはどうすればよいですか?

+0

異なるオプション1..6を配列に入れます。ランダム配列インデックスを選択します。その項目を配列から削除します(最後の配列と置き換えて長さを短くします)。 –

+1

移動 'srand(時間(NULL));' roll_a_diceの外側 –

+1

別の総マルチマルチ –

答えて

5

srand (time(NULL));は、擬似乱数ジェネレータをシードするために使用されます。 time()の粒度が1秒の場合、roll_a_dice()関数を呼び出すたびにPNRGを設定すると、粒度期間内に行われたすべてのコールに対して、rand()は、という同じ番号のを返すようになります。

機能のうちsrand (time(NULL));を移動する場合は、main()で1回だけ呼び出します。

+0

ありがとうございます!申し訳ありませんが、これはnoobieの質問だった場合、私はコーディングにはとても新しいので、私は一生懸命努力しています。 –

+1

なぜこれを千の重複の1つとしてフラグを立てなかったのですか?http://stackoverflow.com/search?q=[c]+srand+? – 2501

+0

彼はまだ各プレーヤーのために同じダイスロールを得ることができます。 –

0

あなたは一度だけ種を蒔く必要があります。 srandをメインの一番上に移動すると動作します。

0

srand(int);は、の種を初期化するために使用される。rand()に電話する度に、 に新しい乱数が加算されます。 srand()roll_a_dice() に電話すると、毎回種をリセットし続けることになります。あなたのメイン()の先頭にsrand() を移動するだけです。

関連する問題