可能你希望每次進來程式的時候,都可以讓使用到感到不一樣
因此你就會需要「Random」隨機值
C#
而在 C# 中,有個一名為「Random」的類別,用來產生你需要的隨機值
static void Main(string[] args) { Random ran = new Random(); for (int i = 0; i < 10; i++) { // ran.Next() = 傳回一個非負的亂數整數 // ran.Next(int maxValue) = 傳回一個不大於 maxValue 的非負亂數整數 // ran.Next(int minValue, int maxValue) = 傳回一個不小於 minValue且不大於 maxValue 的非負亂數整數 Console.WriteLine("Random value = {0}.", ran.Next(0, 10)); } Console.Read(); }
使用「Next( )」的函式來取得一個隨機值,Random 提供了三個多載函式。(說明在程式碼的註解)
Random 的預設值是以「系統時間」來產生隨機值
所以可能在短時間內會產生一樣的數
若想避免這個問題
可以在初始化 Random 物件的時候,給予一個值。
我們這邊來產生一個 HashCode
這樣一來就比較能避免掉重複值一直出現的問題。
static void Main(string[] args) { Random ran = new Random(Guid.NewGuid().GetHashCode()); for (int i = 0; i < 10; i++) { // ran.Next() = 傳回一個非負的亂數整數 // ran.Next(int maxValue) = 傳回一個不大於 maxValue 的非負亂數整數 // ran.Next(int minValue, int maxValue) = 傳回一個不小於 minValue且不大於 maxValue 的非負亂數整數 Console.WriteLine("Random value = {0}.", ran.Next(0, 10)); } Console.Read(); }
所得出來的結果是一樣的。
Unity3D
這篇其實是在用 Unity3D 遊戲引擎寫遊戲的時候發現的(使用的語言也是 C#)
因為以前用 C# 寫程式的時候,很直覺的就會使用 上一段的方法來產生隨機值
但 Unity3D 其實自己有提供一個也叫「Random」的類別
不過其類別的屬性皆為靜態
而產生隨機值的函式名稱也不同
而在 Unity3D 中使用的方式很簡單
程式碼如下
// float Range(float min, float max) = 回傳一個不小於 min 且不大於 max 的隨機浮點數值 // int Range(int min, int max) = 回傳一個不小於 min 且不大於 max 的隨機整數值 int i = Random.Range(0, 100); float j = Random.Range(0.0f, 100.0f);
Range 是一個靜態函式,提供兩種回傳型別 int 和 float
而且一定得給最小值和最大值
還有一個差異是 – 值可以是「負」的!!
而因為這個地方和 C# 本身的是一樣,也是採用目前系統的時間當種子去產生隨機值
所以在 Unity3D 也是可以讓你去變更種子的
我們一樣是使用 HashCode 來當種子
Random.seed = System.Guid.NewGuid().GetHashCode(); // float Range(float min, float max) = 回傳一個不小於 min 且不大於 max 的隨機浮點數值 // int Range(int min, int max) = 回傳一個不小於 min 且不大於 max 的隨機整數值 int i = Random.Range(0, 100); float j = Random.Range(0.0f, 100.0f);
不過因為 Guid 使用到 C# 的 System 命名空間
所以在編譯和包成檔案的時候,也會把這個 dll 給包進去(容量就會增加)
在使用上的話就給大家參考一下
Unity3D Random API 參考連結:http://docs.unity3d.com/Documentation/ScriptReference/Random.html
https://kw0006667.wordpress.com/2013/04/02/c-隨機產生值-vs-unity-隨機產生值/
转自以上链接