Roughlike游戲里面的隨機數種子


隨機數種子,一直讓隨機數出現的規律變得相同的技術

這種技術常用於roughlike游戲中,使用相同種子的玩家開始一場游戲時,里面隨機生成的要素將會變得相同

這使得種子會在玩家之間傳播

 

 【圖:以撒的結合】

 

 【圖:殺戮尖塔】

 

上面2者,都使用了一個 字母加數字 的隨機字符串作為游戲的種子

而使用字符串作為種子一般是使用了字符串的哈希值,因為不同字符串的哈希值是不同且唯一的

 

實例代碼

    /// <summary>
    /// 生成隨機數種子
    /// </summary>
    /// <returns></returns>
    public static string CreateRandomSeed()
    {
        char[] zimu = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
        string str = "";
        //8位
        for (int i = 0; i < 8; i++)
        {
            int _index = RandomNumber(0, zimu.Length);
            str += zimu[_index];
        }

        return str;
    }

使用以上代碼,我們可以得到1個8位的字符串隨機數種子

在unity中設置隨機數種子,調用  

Random.InitState

即可

我們來試驗下
        string seedStr = RandomHelper.CreateRandomSeed();
        //設置種子
        Random.InitState(seedStr.GetHashCode());
        string str = "";
        for (int i = 0; i < 10; i++)
        {
            int num = Random.Range(1, 10);
            str += num;
        }
        Debug.Log(str);

記錄我們生成的種子,我們隨機生成出來的字符串便會是每次都一樣。

 

當然在殺戮尖塔中,其實有多個隨機數種子

地圖是1個種子,商店用的另外一組種子

而殺戮尖塔只需要你輸入1次種子。

做法也很簡單。

我們只需要對生成的種子做固定處理就行

比如

將原字符串末尾加上"shop",再生成 哈希值 作為種子用於商店卡牌的隨機生成,這就會是1個新的種子

末尾加上"map" 即可當做地圖的隨機種子

字符串發生改變,哈希值就會發生改變,所以我們可以用1組種子得到多組種子

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM