0

C# は初めてなので、ばかげている場合は申し訳ありません。

これまでのところ、サイコロに関して次のコードがあります。

Random DiceRandom = new Random();
int DiceThrow = DiceRandom.Next(1, 7);
Console.WriteLine(DiceThrow);
Console.ReadLine();

Console.WriteLine("Player 1 rolled a " + DiceThrow);
Console.ReadLine();

Console.WriteLine("Player 2 rolled a " + DiceThrow);
Console.ReadLine();

Console.WriteLine("Player 3 rolled a " + DiceThrow);
Console.ReadLine();

Console.WriteLine("Player 4 rolled a " + DiceThrow);
Console.ReadLine();

さて、これは細かい番号を作成して表示しますが、それはすべてのプレイヤーにとって同じ番号です。

個々のプレーヤーごとにロールを繰り返すループが必要で、プレーヤーが 6 をロールすると再びロールします。

4

3 に答える 3

2

どうですか:

for( int player = 1; player <= 4; player++ )
{
    while(1) {
        int DiceThrow = DiceRandom.Next(1, 7);
        Console.WriteLine( "Player " + player + " rolled a " + DiceThrow );
        if( DiceThrow < 6 ) break;
    }
    Console.ReadLine();
}
于 2012-12-10T02:17:11.607 に答える
0

readlinesなどについて100%確信があるわけではありませんが、基本的には、印刷するたびに同じサイコロ投げを参照しています。必要なことは、毎回 (DiceRandom.Next(1,7) を介して) 新しいロールを生成することです。

Random DiceRandom = new Random();

for (int i = 1; i <= 4; i++) {
    var roll = DiceRandom.Next(1,7);
    Console.WriteLine("Player 1 rolled a " + roll);
} 
于 2012-12-10T02:16:25.070 に答える
0

問題は、他の人が指摘したように、乱数DiceThrowを使用するたびに更新されないことです。ループを使用せずにこれを修正できますが、使用しないでください。確かにループが必要ですが、おそらく次のようなループが必要です。

for(int i = 1; i <= 4; i++) {
    DiceThrow = DiceRandom.Next(1,7);
    Console.WriteLine("Player " + i + " rolled a " + DiceThrow);
    Console.ReadLine();
    if(DiceThrow == 6) i--;
}

最後の行は少しわかりにくいですが、「6 でリロール」の要件を提供するためにあります。iループは毎回インクリメントするため、ループをデクリメントすると、実質的に同じプレイヤーに対してループが繰り返されます。

編集: 実際には、代わりに while ループを使用するこれのより明示的なバージョンは次のようになります。

int i = 1;
while(i <= 4) {
    DiceThrow = DiceRandom.Next(1,7);
    Console.WriteLine("Player " + i + " rolled a " + DiceThrow);
    Console.ReadLine();
    if(DiceThrow != 6) i++;
}
于 2012-12-10T02:17:29.953 に答える