2012-12-10 63 views
0

新的C#所以很抱歉,如果它脫落愚蠢。骰子循環,隨着再次滾動如果6

我有下面的代碼迄今就我的骰子:

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

+2

再來一個!當然你可以計算出你需要調用DiceThrow = DiceRandom.Next(1,7);每次...如果你設置一個變量(用任何語言),你期望它有什麼值? –

+1

@MitchWheat這對新手來說並不一定很明顯。 'int DiceThrow = DiceRandom.Next(1,7);'這行可以被看作是一個函數的內聯定義,如果你不是很熟悉C#和編程。 – Jeff

+0

@Jeff:簡單變量賦值比起函數委託,更有可能被初學者假設。對? –

回答

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++; 
} 
+1

修改循環變量通常不是很好的做法。然後,我的答案有一個無限循環=) – paddy

+0

@paddy是的,我傾向於同意你的看法,但另一種選擇是嵌套for循環(不受歡迎,但也許更少,所以我承認)或一個while循環有一個非常複雜的表達式,比如'while(player <= 4 && DiceThrow!= 6)'或什麼的,然後在每次迭代中只更新其中的一個變量,這對我來說聽起來很可怕。 – Jeff

+0

我選擇使用這個代碼傑夫,感謝很多工作完美。 現在,因爲這是我在製作的一個遊戲,玩家在每一輪結束時都保持他們的分數加起來(我會說一輪是一卷,每個不包括6)我如何顯示累積分數每輪結束後再接一輪? – user1890490

0

不是100%肯定的readlines方法的,等會再推出但從本質上引用的是相同的骰子每次打印時扔掉。你需要做的是每次生成一個新的卷(通過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); 
} 
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(); 
} 
+0

如果玩家擲骰子6,OP要求擲出多次。這個內部迴路是實現它的一種方式。 – paddy

+0

是的,這個更好的版本是'int DiceThrow; while((DiceThrow = DiceRandom.Next(1,7))!= 6){'但即使這很笨拙...... – Jeff

+0

@paddy:好點:我錯過了。 –