Unity 在一天内每运行一次程序生成不同的随机数

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_40229737/article/details/99467163

 最近项目中涉及到一个功能:一天内生成的随机数不能重复,随机数取值范围为001到999,这就需要把Unity程序每次运行产生的随机数储存起来,这里我用的是把数据存储为Json对象,每次运行进行读取判断是否是同一天,如果是同一天那如何不产生重复的随机数?如果不是同一天清除掉前天的数据依次循环。

  首先把创建Json文件放在Assets/StreamingAssets文件夹里命名  :JsonTest.json,格式如下:

 上图为8月13号的json数据信息。8月14号运行之后如下

同一天继续运行一次,日期属性不变,随机数数量加1且不重复。

 以此类推,代码如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;
using System.IO;
//要存储为json的对象
[Serializable]
public class DayRangeMessage
{
    public string date_time;//存储当天的日期
    public List<int> rangelist; //一天之内每次运行程序生成的随机数列表
}

public class CreateNum : MonoBehaviour
{
    string Todaydate;
    string last_date;
    string JsonPath;
    string Id;
    int max_Range;
    //生成的随机数
    int rangeNubers;  
    DayRangeMessage dayrangeMessagetemp;//要读取出来的对象
    private void Start()
    {
        max_Range = 1000;//随机数取值范围的右区间最大值渠道999 UnityEngine.Random.Range(1, max_Range);
        GetTodayDate();//获取当天日期  
        JsonPath = Application.streamingAssetsPath + "/JsonTest.json";
        ReadJson();
    }
   
    //从本地读取json数据
    public void ReadJson()
    {
        if (!File.Exists(JsonPath))
        {
            Debug.LogError("读取的文件不存在!");
            return;
        }
        string json = File.ReadAllText(JsonPath);
        dayrangeMessagetemp = JsonUtility.FromJson<DayRangeMessage>(json);
        last_date = dayrangeMessagetemp.date_time;     
        if (last_date != Todaydate)
        {
            Debug.LogError("不是同一天");
            dayrangeMessagetemp.date_time = Todaydate;//   
            dayrangeMessagetemp.rangelist.Clear();//不是同一天清除json文件里原先生成的随机数
            CreateRangeNum();
        }
        else
        {
            Debug.LogError("是同一天");
            CreateRangeNum();
        }
        ////获取第二个属性:
        //for (int j = 0; j < dayrangeMessagetemp.rangelist.Count; j++)
        //{
        //    Debug.Log(dayrangeMessagetemp.rangelist[j]);

        //}
    }
    public void SaveJson()
    {
        //如果本地没有对应的json 文件,重新创建
        if (!File.Exists(JsonPath))
        {
            File.Create(JsonPath);
        }
        string json = JsonUtility.ToJson(dayrangeMessagetemp, true);
        File.WriteAllText(JsonPath, json);
        Debug.Log("保存成功");


    }
    #region   同一天内每运行一次生成一个随机数存到本地Json数据里
    //产生的随机数放在列表里
    public void CreateRangeNum()
    {
        while (dayrangeMessagetemp.rangelist.Count < max_Range)
        {
            rangeNubers = UnityEngine.Random.Range(0, max_Range);//随机数取值范围是0到999
            if (!dayrangeMessagetemp.rangelist.Contains(rangeNubers))
            {
                dayrangeMessagetemp.rangelist.Add(rangeNubers);
                //rangeNubers.ToString().Length判断随机数是个位数还是十位数
                switch (rangeNubers.ToString().Length)
                {
                    case 1:
                        Id = "00" + rangeNubers.ToString();
                        break;
                    case 2:
                        Id = "0" + rangeNubers.ToString();
                        break;
                    case 3:
                        Id = rangeNubers.ToString();
                        break;
                }
                Debug.LogError(Id + "身份证明");
                return;//找到满足条件后结束循环,否则继续循环 
            }
            else
            {
                continue;
            }
        }
        if (dayrangeMessagetemp.rangelist.Count >= max_Range)
        {

            Debug.LogError("超出了随机数的最大取值");

        }

    }

    private void OnDisable()
    {
        SaveJson();//程序关闭自动保存数据
    }
    #endregion
    /// <summary>
    /// 获取当天日期
    /// </summary>
    public void GetTodayDate()
    {
        DateTime nowDateTime = DateTime.Now;
        int int_NewYear = nowDateTime.Year;
        int int_NewMouth = nowDateTime.Month;
        int int_NewDay = nowDateTime.Day;
        Todaydate = int_NewYear + "年" + int_NewMouth + "月" + int_NewDay + "号";

    }
  
    #region 初始化Json格式用的
    //DayRangeMessage dayrangeMessage;//要存起来的对象
    //void InitJsonData()
    //{
    //    dayrangeMessage = new DayRangeMessage();//实例化对象
    //    //给DayRangeMessage对象的第一个属性date_time赋值
    //    dayrangeMessage.date_time = Todaydate;
    //    //给DayRangeMessage对象的第二个属性rangelist赋值
    //    dayrangeMessage.rangelist = new List<int>();
    //    dayrangeMessage.rangelist.Add(10);
    //    dayrangeMessage.rangelist.Add(12);
    //}
    #endregion
}


猜你喜欢

转载自blog.csdn.net/qq_40229737/article/details/99467163