Dnf史诗装备的爆率的程序模拟

前几天在贴吧看到网友发帖问 dnf里爆一套史诗装备有多难,大概要多少张票。感觉有点意思,于是我写了个小程序来大概的模拟了一下。。
首先该程序的爆率机制(爆率因子)有4重
第一重:根据自身进入地下城所带的深渊票来调整爆率
第二:连续多把(设定在50把左右) 未出货,会增加爆率
第三:腾讯游戏嘛 ,所以设定了  根据你充钱的多少及最近充钱的时间来算爆率
第四:就是设置一个基础爆率

机制大致是这样,最后模拟的结果和我周围勇士玩的时候爆率差不多。接下来看下代码吧
录入装备类
public class Equipment {

public Equipment() {}

String[] mozhan=new String[]{"魔战套装部件肩甲","魔战套装部件胸甲","魔战套装部件上衣","魔战套装部件裤子","魔战套装部件鞋"};
String [] tianyu=new String[]{"天御套装部件肩甲","天御套装部件胸甲","天御套装部件上衣","天御套装部件裤子","天御套装部件鞋"};
String [] wanshi=new String[]{"万世套装部件肩甲","万世套装部件胸甲","万世套装部件上衣","万世套装部件裤子","万世套装部件鞋"};
String [] baidu=new String[]{"百毒套装部件肩甲","百毒套装部件胸甲","百毒套装部件上衣","百毒套装部件裤子","百毒套装部件鞋"};

String [] zhanshu=new String[]{"战术之王部件肩甲","战术之王套装部件胸甲","战术之王套装部件上衣","战术之王套装部件裤子","战术之王套装部件鞋"};

//可录入需要的史诗套

}
//逻辑代码处理类
public class Gailv {

List mozhan_set=new ArrayList();
List tianyu_set=new ArrayList();
List wanshi_set=new ArrayList();
List baidu_set=new ArrayList();
List zhanshu_set=new ArrayList();
List mozhan_set1=new ArrayList();
List tianyu_set1=new ArrayList();
List wanshi_set1=new ArrayList();
List baidu_set1=new ArrayList();
List zhanshu_set1=new ArrayList();
double probability=0.01; //基础概率
double random_probability=0.0; //未出货,随机几率增加
double C_probability=0.0;
String[] epic=new String[100000]; //史诗装备
//爆出史诗装备的件数
int epicNum=0;
int mozhan_num=0; //魔战套件爆出的个数
int tianyu_num=0; //天御
int wanshi_num=0; //万世
int baidu_num=0; //百毒
int zhanshu_num=0; //战术
Random in=new Random();

public void product(double num,double progress_probability,double poll_probability){
//伪随机,连续对多次未出货  随机 几率提高;
int _random=99;
// int _random=9;
Equipment eq=new Equipment();
for(int i=0;i
// double No_product_probability=in.nextInt(_random)+1;
double No_product_probability=Math.random()*100;
if(i==40){
C_probability=0.01; //连续对多次未出货  随机 几率提高; 对应机制四
}
if((No_product_probability)/1000<(probability+progress_probability+poll_probability+C_probability)){
//爆出一件史诗
switch (this.getRandom(35)) { //假定地下城一共有史诗套装35套
case 1: //魔战套
int random_equiment_mozhan=this.getRandom(5);
System.out.println(eq.mozhan[random_equiment_mozhan]);
mozhan_num++;
mozhan_set.add(eq.mozhan[random_equiment_mozhan]);
epicNum++;
break;
case 2: //天御套装
int random_equiment_tianyu=this.getRandom(5);
System.out.println(eq.tianyu[random_equiment_tianyu]);
epicNum++;
tianyu_num++;
tianyu_set.add(eq.tianyu[random_equiment_tianyu]);
break;
case 3: //万世套装
int random_equiment_wanshi=this.getRandom(5);
System.out.println(eq.wanshi[random_equiment_wanshi]);
wanshi_num++;
wanshi_set.add(eq.wanshi[random_equiment_wanshi]);
epicNum++;
break;
case 4: //百毒套装
int random_equiment_baidu=this.getRandom(5);
System.out.println(eq.baidu[random_equiment_baidu]);
epicNum++;
baidu_set.add(eq.baidu[random_equiment_baidu]);
baidu_num++;
break;
case 5: //战术之王套装
int random_equiment_zhanshu=this.getRandom(5);
System.out.println(eq.zhanshu[random_equiment_zhanshu]);
epicNum++;
zhanshu_set.add(eq.zhanshu[random_equiment_zhanshu]);
zhanshu_num++;
default:
System.out.println("目前未录入系统的装备套装");
epicNum++;
break;
}

}
}
// System.out.println(probability+progress_probability+poll_probability);
System.out.println("魔战套组件:"+mozhan_num+"天御套装组件:"+tianyu_num+"万世套装"+wanshi_num+"战术之王套装"+zhanshu_num+"百毒套装"+baidu_num);
System.out.println("魔战套一共出货:"+mozhan_set);
System.out.println("天御套一共出货:"+tianyu_set);
System.out.println("万世套一共出货:"+wanshi_set);
System.out.println("百毒套一共出货:"+baidu_set);
System.out.println("战术之王套一共出货:"+zhanshu_set);
System.err.println("共爆出"+epicNum+"件史诗装备"+"\t\t其史诗件爆出的概率为:"+(double)epicNum/num);


for(int i=0;i<5;i++){
if(mozhan_set.contains(eq.mozhan[i])){
mozhan_set1.add(eq.mozhan[i]);
}
}
int mozhannum=mozhan_set1.size();
System.out.println("已集齐魔战套\t:"+mozhannum+"\t\t出齐"+mozhannum+"件的概率为:"+(double)mozhannum/epicNum);
// this.getPosition(tianyu_set,1);
for(int i=0;i<5;i++){
if(tianyu_set.contains(eq.tianyu[i])){
this.tianyu_set1.add(eq.tianyu[i]);
}
}
int tianyunum=tianyu_set1.size();
System.out.println("已集齐天御套\t:"+tianyunum+"\t\t出齐"+tianyunum+"件的概率为:"+(double)tianyunum/epicNum);
for(int i=0;i<5;i++){
if(wanshi_set.contains(eq.wanshi[i])){
this.wanshi_set1.add(eq.wanshi[i]);
}
}
int wanshi_setnum=wanshi_set1.size();
System.out.println("已集齐万世套\t:"+wanshi_setnum+"\t\t出齐"+wanshi_setnum+"件的概率为:"+(double)wanshi_setnum/epicNum);
for(int i=0;i<5;i++){
if(baidu_set.contains(eq.baidu[i])){
this.baidu_set1.add(eq.baidu[i]);
}
}
int baidunum=baidu_set1.size();
System.out.println("已集齐百毒套\t:"+baidunum+"\t\t出齐"+baidunum+"件的概率为:"+(double)baidunum/epicNum);
for(int i=0;i<5;i++){
if(zhanshu_set.contains(eq.zhanshu[i])){
this.zhanshu_set1.add(eq.zhanshu[i]);

}
}
int zhanshunum=zhanshu_set1.size();
System.out.println("已集齐战术套\t:"+zhanshunum+"\t\t出齐"+zhanshunum+"件的概率为:"+(double)zhanshunum/epicNum);
// System.out.println("已集齐天御套\t:"+tianyu_set1.size());
// System.out.println("已集齐万世套\t:"+wanshi_set1.size());
// System.out.println("已集齐百毒套\t:"+baidu_set1.size());
// System.out.println("已集齐战术套\t:"+zhanshu_set1.size());
System.out.println("队友或自身携带的深渊票少于1张");
}
public int getRandom(int i){
int random=in.nextInt(i);
return random;
}

}
//主窗口
public class SSTotal01 {

static Scanner in=new Scanner(System.in);
static double progress_probability;
static double poll_probability;
public static void main(String[] args) {
SSTotal01 ss=new SSTotal01();
Gailv gl=new Gailv();
progress_probability=ss.exchangeMoney();
System.out.println();
if(progress_probability>=0){
System.out.print("请显示你所持有的地下城门票:");
int num=in.nextInt();
poll_probability=ss.poll(num);
int count =num/25;
System.err.println("当前可进入次数为:"+count);
gl.product(count,progress_probability,poll_probability);
long gameMoney=(int)num*30000;
System.out.println("所持有的的深渊票换算成游戏币为:\t"+gameMoney);
long money=(gameMoney/(100*10000))*2;
System.out.println("你已消耗"+num+"张深渊票\t总计人民币为:"+money);
// System.out.println(Math.random()*100);
}
}
//充钱:返回充值金额,提高爆率   机制之一
public double exchangeMoney(){
int _money=0;
double progress_probability=0.0; //充值返现的爆率
System.out.print("是否充值(可提高爆率):");
String str=in.next();
if("Y".equals(str)){
System.out.print("充的多少影响着你账号的爆率,请输入你所要充值的金额:");
_money=in.nextInt();
if(_money>50000){
progress_probability+=0.006;
}else if(_money>10000){
progress_probability+=0.005;
}else if(_money>5000){
progress_probability+=0.003;
}else if(_money>1000){
progress_probability+=0.002;
}else{
progress_probability+=0.001;
}//你的这个充值的概率将会根据你充值的时间长短来回调
}
return progress_probability;
}
public  double poll(int _poll){ //入场劵机制
double poll_probability=0.0;
if(_poll<25){
System.out.println("你在搞笑?");
}else if(_poll>10000){
poll_probability-=0.0006;
}else if(_poll>5000){
poll_probability-=0.0005;
}else if(_poll>1000){
poll_probability-=0.0004;
}else {
poll_probability+=0.005;
}
return poll_probability;
}
}

好久没更新博客了,哎 堕落了堕落了。以后会定时更新     哈哈
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值