搜索
简帛阁>技术文章>【Unity2017】如何将ArrayList中的元素打乱顺序。

【Unity2017】如何将ArrayList中的元素打乱顺序。

前两天突发奇想,想搞一个类似巫师3昆特牌的小游戏来让玩家带入《镜花战记·大冒险》的世界观。于是自己脑洞了一个类似拼点数的集换式卡牌桌游。

思维导图写好之后,很快就遇到了第一个困难:洗牌这个函数应该怎么写。

因为使用的是Unity2017版本,因此使用C#这个语言来编写脚本。在权衡了几次后,决定使用"较灵活"的ArrayList储存牌堆、手牌及场上卡牌的数据。于是翻阅了官方自带的文件,临时学习了这个类似array又不是array的类。

 

思路如下,

一、首先需要“随机数”。按理说C#中直接可以实例化Random类的一个对象,再使用Next()方法来取一个区间内的随机数,可是当我在VScode里编写如下代码时,却出现了以下错误:

 

        Random r = new Random();

        int shenmegui = r.Next(0,100);

 

报错如下:

        Type `UnityEngine.Random' does not contain a definition for `Next' and no extension method `Next' of type `UnityEngine.Random' could be found. Are you missing an assembly reference?

        应该是命名空间的问题?我也using了system了呀。

 

但是我后来调用了另外一个方法,才得以实现这个随机数的创建:

 

        int shenmegui = UnityEngine.Random.Range(0, 100);

 

我们有了随机数,再把这个随机数扔进ArrayList的下标里就能获取到数组中的一个随机元素,再令这个元素与另一个随机的元素交换位置,基本就能实现洗牌这个功能:

 

public ArrayList Shuffle(ArrayList arr){

        ArrayList oldArr = new ArrayList(arr);

        //创建接收数组

        for(int j = 0; j < 2;j++){//多次洗牌

            for(int i = 0;i < oldArr.Count; i++){//洗牌操作:让两个随机下

            //标的元素交换位置,执行次数为数组中元素个数。

                    int r1 = UnityEngine.Random.Range(0, oldArr.Count);

                    int r2 = UnityEngine.Random.Range(0, oldArr.Count);

                    int temp = (int)oldArr[r1];

                    oldArr[r1] = oldArr[r2];

                    oldArr[r2] = temp;

            }

        }

 

        //使用新数组接收交换位置的数组。

        ArrayList newArr = new ArrayList(oldArr);

 

        //遍历ArrayList查看结果

        Debug.Log("数组中都有:");

         for(int i = 0; i < arr.Count; i++){

            Debug.Log(newArr[i]);

         }

        //返回数据

        return newArr;

    }

 

大功告成,虽然方法很笨。

希望我能坚持到《镜花战记·大冒险》完成的那天。

 

 

本文实例讲述了C实现数组内元素打乱顺序的方法。分享给大家供大家参考。具体如下:1泛型类代码//泛型类classItem<T>{T[]item;//构造函数publicItem(T[]ob
Java删除ArrayList中的重复元素的2种方法ArrayList是Java中最常用的集合类型之一。它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序。在编码时我们经常会遇到那种必须
ArrayList顺序表前言泛型(Generic)泛型的引入泛型的基本概念总结包装类(WrapperClass)包装类的引入基本数据类型与包装类的对应关系ArrayList顺序ArrayList
1:for循环+随机数实现相同位置的元素交换public<T>voidshuffle(List<T>list){intsizelistsize();Randomrandomne
前言在做试卷的时候,需要一个句子中的单词、一个单词中的字符、选择题中的答题项打乱生成一个随机的序列,下面我将其抽象成工具类,方便大家以后复用。示例代码publicstatic<V>bo
java:Conllection中的List,ArrayList添加元素,删除元素,输出元素//为list接口实例化List<String>addlistnewArrayList<S
去除一个ArrayList的重复元素有两种方法:(ArrayList与Vector的存储结构是Object[],LinkedList是双向列表)第一种是不需要借助临时list,用equals方法比较A
C随机打乱列表List项目顺序以下泛型扩展方法,实现了随机打乱泛型列表List<T>的功能publicstaticList<t>DisorderItems<t>(t
ArrayList类的get()方法接受表示索引值的整数,并在指定索引处返回当前ArrayList对象的元素。因此,如果0传递给此方法,则可以获取当前ArrayList的第一个元素;如果传递lis
实现思路:list对象循环两次,拿外层数据和里面的数据对比,一样的删除外层(外层元素肯定比内存的靠前),如果一样的话,删除外层数据,这样最后输出外层数据的list,结果就能保证唯一性,并且保留了后面