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

  • 相关阅读:
    solr 5.3.1安装配置
    STS 设置代码注释模板
    visual studio 设置代码注释模板
    JAXBContext处理CDATA
    用STS和Maven的方式创建一个JavaWeb项目
    .NET跨平台实践:用C#开发Linux守护进程-Daemon
    不装mono,你的.NET程序照样可以在Linux上运行!
    Tomcat关闭日志输出
    使用git pull文件时和本地文件冲突怎么办?
    Linux命令-进程后台执行:nohup(就是不挂起的意思)
  • 原文地址:https://www.cnblogs.com/sanyejun/p/14282478.html
Copyright © 2020-2023  润新知