模拟YS抽奖

public class YSController {
    //金光数组-设置前三个为UP物品
    String[] goldLight = {"钟离","尤拉","甘雨","七七","莫娜","护摩之杖","和璞鸢","狼的末路","贯虹之槊","风鹰剑","枫原万叶"};
    //紫光数组-设置前三个为UP物品
    String[] purpleLight = {"早柚","行秋","班尼特","祭礼剑","钟剑","西风猎弓","暗巷猎手","烟绯","芭芭拉","笛剑"};
    //蓝光数组
    String[] blueLight = {"黎明神剑","冷刃","暗铁剑","白铁大剑","白樱枪","鸦羽弓","讨龙英杰谭","魔导绪论"};

    //UP物品数组-state[0]为金光,state[1]为紫光
    int[] state = {0,0};

    //生成随机数
    Random r = new Random();

    List list = new ArrayList();
    {//生成抽奖奖池共1000个元素,其中金色0有六个概率0.6%,紫色1有51个概率5.1%,蓝色2有943个
        for (int i = 0; i < 1000; i++) {
            if(i<6){list.add(i,0);}
            else if (i <57){list.add(i,1);}
            else {list.add(i,2);
            }
        }
    }

    public void playGame(){
        Scanner s = new Scanner(System.in);

        //接收抽奖池的值:0,1,2
        int num;

        int no_10 = 0;//十发保底累计,紫光积累
        int no_90 = 0;//九十发保底累计,金光积累
        int o = 0;//抽奖次数累计

        System.out.println("开始抽奖=======>>>");
        for (int i = 0; i < 1000; i++) {
            System.out.println("累计抽奖"+o);
            System.out.print("请开始十连抽奖:");
            Object in = s.next();
            for (int j = 0; j < 10; j++) {
                //随机获取抽奖池的值
                num = (int)list.get(r.nextInt(1000));
                o++;
                //no_10是从0开始,9为第十发,no_90是从0开始,89为第九十发
                //num=0是金光,1是紫光,2是蓝光
                //十连紫光保底no_10 == 9第十发并且num != 1不是紫光时给保底紫光
                if (no_10 == 9 && num != 1){num = 1;no_10 = 0;no_90++;System.out.print("!保底!");}
                //九十连金光保底no_90 == 89第九十发并且num != 0不是金光时给保底金光
                else if (no_90 == 89 && num != 0){num = 0;no_90 = 0;no_10++;System.out.print("!保底!");}
                else {
                    //保底累计计算
                    if (num == 1){no_10 = 0;no_90++;}
                    else if(num == 0){no_90 = 0;no_10++;}
                    else {no_10++;no_90++;}
                }
                operation(num,state);//实际出货
            }
            System.out.println();
        }


    }

    public void operation(int num , int[] state){
        String str = "";
        int i;
        if (num == 0){
            //随机获取金光数组索引
            i = r.nextInt(goldLight.length);
            //如果是前三个物品则为UP物品,state[0] = 0
            //如果不是前三个物品则为UP物品,state[0] = 1,下次出金必出UP物品
            if (i < 3){
                str = "UP限定[★金光★]"+goldLight[r.nextInt(2)];
                state[0] = 0;
            }else {
                if (state[0] == 1){
                    str = "UP限定[★金光★]"+goldLight[r.nextInt(2)];
                    state[0] = 0;
                }else {
                    str = "[★金光★]"+goldLight[i];
                    state[0] = 1;
                }
            }
        }else if (num == 1){
            //随机获取紫光数组索引
            i = r.nextInt(purpleLight.length);
            //如果是前三个物品则为UP物品,state[1] = 0
            //如果不是前三个物品则为UP物品,state[1] = 1,下次出紫必出UP物品
            if (i < 3){
                str = "UP限定[☆紫光☆]"+purpleLight[r.nextInt(3)];
                state[1] = 0;
            }else {
                if (state[1] == 1){
                    str = "UP限定[☆紫光☆]"+purpleLight[r.nextInt(3)];
                    state[1] = 0;
                }else {
                    str = "[☆紫光☆]"+purpleLight[i];
                    state[1] = 1;
                }
            }
        }else {
            i = r.nextInt(blueLight.length);
            str = "[蓝光]"+blueLight[i];
        }

        //输出出货物品
        switch (num){
            case 0:System.out.print(str + " ");break;
            case 1:System.out.print(str + " ");break;
            case 2:System.out.print(str + " ");break;
        }

    }

}

控制台输出:

祝大家单抽出金,十连满命。 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值