生成随机且不重复的怪物和数字

来源:互联网 发布:南京黑马程序员考试 编辑:程序博客网 时间:2024/04/29 03:54

一直在想这个问题,终于搞定了,就是说要生成100个怪物,且要控制怪物之间的间距,不能太近了。这就要考虑如何才能不重复:

  public List<int> num = new List<int>();//用数组的话没有直接移除的方法
    public List<int> view = new List<int>();//随机好的数字
    void Start()
    {
        for (int i = 0; i < 100; i++)//100是随机的数量
        {
            num.Add(i);//向随机的库里填加要随机的元素,这里我就用0-99吧,表示0至100随机不重复
        }
        for (int i = 0; i < 100; i++)
        {
            int index = Random.Range(0, num.Count);//这里随机的是所有随机数里边的索引
            view.Add(num[index]);//根据索引来取到相应的数值
            num.RemoveAt(index);//把该索引移除,以实现不重复
        }
    }

思路就是随机一个我就从库里删除这个数值的索引,然后下次随机的时候就不会有这个索引了,自然就达到了不重复的目的


接下来是生成怪物了:

using UnityEngine;
using System.Collections.Generic;


public class CreateRandomMonster : MonoBehaviour
{
    List<Vector3> pos = new List<Vector3>();//所有的坐标都存放在这里
    public GameObject cube;//需要生成的物体
    int count = 10;//生成的数量
    int space = 2;//物体之间的间距
    void Start()
    {
        CreateMonster();//生成坐标,
        RandomMonster();//随机产生
    }


    void CreateMonster()
    {
        for (int i = 0; i < 10; i += space)//就是存放坐标的一个过程,这里就用10*10的方阵吧
        {
            for (int j = 0; j < 10; j += space)
            {
                pos.Add(new Vector3(i, 0, j));
            }
        }
    }


    void RandomMonster()
    {
        for (int i = 0; i < count; i++)
        {
            int index = Random.Range(0, pos.Count);//随机一个坐标库里的坐标
            GameObject mon = Instantiate(cube, pos[index], Quaternion.identity) as GameObject;//将生成的物体放在该坐标
            mon.transform.parent = transform;//找个parent
            pos.RemoveAt(index);//随机完一个坐标就从库里删除以达到不重复的目的
        }
    }
}


0 0
原创粉丝点击