在.net Framework中提供了一個專門用來產生隨機數的類System.Random。C#可以用Random產生隨機的R、G、B值,從而生成隨機的顏色。
對於隨機數,計算機不可能產生完全隨機的數字,所謂的隨機數發生器都是通過一定的算法對事先選定的隨機種子做復雜的運算,用產生的結果來近似的模擬完全隨機數,這種隨機數被稱作偽隨機數。偽隨機數是以相同的概率從一組有限的數字中選取的。所選數字並不具有完全的隨機性,但是從實用的角度而言,其隨機程度已足夠了。偽隨機數的選擇是從隨機種子開始的,所以為了保證每次得到的偽隨機數都足夠地“隨機”,隨機種子的選擇就顯得非常重要。如果隨機種子一樣,那么同一個隨機數發生器產生的隨機數也會一樣。一般地,我們使用同系統時間有關的參數作為隨機種子,這也是.net Framework中的隨機數發生器默認采用的方法。
我們可以使用兩種方式初始化一個隨機數發生器:
第一種方法不指定隨機種子,系統自動選取當前時間作為隨機種子:
int R = new Random().Next(255); int G = new Random().Next(255); int B = new Random().Next(255); B =(R + G > 400) ? R+G-400:B;//0 : 380 - R - G; B = (B > 255) ? 255 : B;
Color.FromArgb(R, G, B)
但是這樣發現,生成的隨機顏色並不好,,會經常有顏色相近的顏色出現。因此需要改進。如下:
第二種方法可以指定一個int型參數作為隨機種子:
int iSeed=10;
Random ro = new Random(10);
long tick = DateTime.Now.Ticks; Random ran = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32)); int R = ran.Next(255); int G = ran.Next(255); int B = ran.Next(255); B =(R + G > 400) ? R+G-400:B;//0 : 380 - R - G; B = (B > 255) ? 255 : B; Color.FromArgb(R, G, B)
這樣可以保證99%不是一樣。
之后,我們就可以使用這個Random類的對象來產生隨機數,這時候要用到Random.Next()方法。這個方法使用相當靈活,你甚至可以指定產生的隨機數的上下限