欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-27 17:31:27
前两天突发奇想,想搞一个类似巫师3昆特牌的小游戏来让玩家带入《镜花战记·大冒险》的世界观。于是自己脑洞了一个类似拼点数的集换式卡牌桌游。思维导图写好之后,很快就遇到了第一个困难:洗牌这个函数应该怎么写。因为使用的是Unity2017版本,因此使用C#这个语言来编写脚本。在权衡了几次后,决定使用"较灵活"的ArrayList储存牌堆、手牌及场上卡牌的数据。于是翻阅了官方自带的文件,临时学习了这个类似array又不是array的类。思路如下,一、首先需要“随机数”。按理说C#中直接可以实例....

前两天突发奇想,想搞一个类似巫师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;

    }

 

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

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

 

 

本文地址:https://blog.csdn.net/qq_30491609/article/details/107619724

相关标签: unity3d c#