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组种子得到多组种子

 

posted @ 2021-01-15 15:50  三页菌  阅读(1225)  评论(0编辑  收藏  举报