栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

原神抽卡模拟器,unity制作(由于没有获得作者的视频授权,不会发布软件,只展示算法与开发等,效果图在个人主页类有资源下载,不会上传视频)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

原神抽卡模拟器,unity制作(由于没有获得作者的视频授权,不会发布软件,只展示算法与开发等,效果图在个人主页类有资源下载,不会上传视频)

      

五星效果图

以上为展示,没做优化,想要顺畅,可以做个预加载

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Video;


public class OneGifi : Pond
{
     public void OneGift()
    {
        //抽奖即加一
        wuFloor += 1;
        siFloor += 1;



//五星出货区
        int wuI = 0;
        //默认出奖值
        if (wuFloor < 40)
            Random_rewards = Random.Range(10, 999);
        else if (wuFloor < 73) Random_rewards = Random.Range(8, 1000);
        R = (int)Random_rewards; Debug.Log(R);
        //判断五星是否出了
        if (Withdraw == true)
        {
            wuFloor = 0;
            Withdraw = false;
        }
        if (wuFloor < 73)
        {
            while (wuI < 6)
            {
                if (R == wuRewards[wuI])
                {

                    Withdraw = true;
                    wuFloor = 0;
                }
                wuI++;

            }
        }


        //当五星保底到73后用新算法
        else if (wuFloor < 90)
        {
            //从新定义wurewards的范围,将随机出来的数放入The_Current_Probability_wu数组中,依次判断出奖值是否与出奖区对应
            int[] Temp_Data_wu = new int[1000];
            int The_Current_Probability_wu = 6 + 53 * (wuFloor - 73);
            Random_rewards = Random.Range(0, 1000);
            R = (int)Random_rewards;
            int new_min = The_Current_Probability_wu / 2;
            int new_max = 1000 - The_Current_Probability_wu / 2;
            //创建集中池
            for (int i = 0, j = 1000; i < new_min && j > new_max; i++, j--)
            {
                Temp_Data_wu[i] = i + 1;
                Temp_Data_wu[j - 1] = j - 1;
            }
            int new_wu = 0;
            while (new_wu < 1000)
            {
                if (R == Temp_Data_wu[new_wu])
                {
                    Withdraw = true;
                    break;
                }
                new_wu++;
            }
        }
        else
        {
            Withdraw = true;
        }
        



        

        //判断四星
        if (The_Purple == true&&Withdraw!=true)
        {
            The_Purple = false;
            siFloor = 0;
        }
        //判断四星是否出了
        int[] Temp_Data_si = new int[1000];
        int The_Current_Probability_si = 561;


        //定义wurewards的范围,将出奖值出来的数放入The_Current_Probability_wu数组中,依次判断出奖值是否与出奖区对应
        if (siFloor < 9)
        {
            Random_rewards = Random.Range(15, 980);
            R = (int)Random_rewards;
            int new_min = 26;
            int new_max = 1000 - 25;
            //创建集中池
            for (int i = 0, j = 1000; i < new_min && j > new_max; i++, j--)
            {
                Temp_Data_si[i] = i + 1;
                Temp_Data_si[j - 1] = j - 1;
            }
            int new_si = 14;
            while (new_si < 26 || (new_si > 975 && new_si < 1000))
            {
                if (new_si > 26)
                    new_si += 949;
                if (R == Temp_Data_si[new_si])
                {
                    The_Purple = true;
                    break;
                }
                new_si++;
            }
        }




        else if (siFloor < 10)
        {

            Random_rewards = Random.Range(0, 1000);
            R = (int)Random_rewards;
            int new_min = The_Current_Probability_si / 2;
            int new_max = 1000 - The_Current_Probability_si / 2;
            //创建集中池
            for (int i = 0, j = 1000; i < new_min && j > new_max; i++, j--)
            {
                Temp_Data_si[i] = i + 1;
                Temp_Data_si[j - 1] = j - 1;
            }
            int new_si = 0;
            while (new_si < new_min || (new_si > new_max && new_si < 1000))
            {
                if (new_si > new_min)
                    new_si += 1000 - new_max;
                if (R == Temp_Data_si[new_si])
                {
                    The_Purple = true;
                    break;
                }
                new_si++;
            }
        }

        if(siFloor==9)
        {
            The_Purple = true;
        }

        //没有的话出三星
    




    //抽中后判定
    
        if(The_Purple==true)
        {   
            //判定是否定轨,如果已经定轨成功则取消定轨
            
            Random_rewards = Random.Range(0, 11);
            R = (int)Random_rewards;
            if (R > 0 && R < 6)
                Out_wu = 1;
            else if (R == 6)
                Out_wu = 2;
            else if (R == 7)
                Out_wu = 3;
            else if (R == 8)
                Out_wu = 4;
            else if (R == 9)
                Out_wu = 5;
            else
                Out_wu = 6;
        }

        

        //
        if (Withdraw == true)
        {
            //判定是否定轨,如果已经定轨成功则取消定轨
           

            
                Random_rewards = Random.Range(0, 511);
            double R = Random_rewards;
            //角色池
            if(R<255)
            {
                double  R_min = 12.75;
                Out_si = 1;
                while ((R_min + 12.75) <= R)
                {
                    R_min += 12.75;
                    Out_si++;
                }
            }
            //武器池
            else
            {
                double R_min=14.16;
                Out_si = 1;
                while((R_min + 14.16)<=R)
                {
                    R_min += 14.16;
                    Out_si++;
                }
            }
               



        }


        
    }

}


以上为“简易(没有原本精细)"算法,我借鉴了b站一颗平衡树大佬对原神抽卡机制研究

十连简单来说就是将单抽循环十次

效果视频连接可在我主页下查找

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/906256.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号