java做的原神抽卡模拟小程序
难度不大,适合学完面向对象后做着玩。
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Random;
import java.util.Scanner;
public class Card {
public static void main(String[] args) {
/**
* 复刻周期
*/
String[][] role={{"温迪","可莉"},{"达达利亚","钟离"},{"阿贝多","甘雨"},{"魈","胡桃"},{"神里凌华","申鹤"}};
Calendar calendar = Calendar.getInstance();
int second=calendar.get(Calendar.SECOND);//当前秒数
int flag=second% role.length;//复刻数组下标
System.out.println("-----UP角色-----");
System.out.println(role[flag][0]+"\t\t"+role[flag][1]);
Scanner scanner = new Scanner(System.in);
System.out.print("你选择抽取的池子(1"+role[flag][0]+" "+"2"+role[flag][1]+"):");
int choice=scanner.nextInt();
String roleName;
if(choice==1){
roleName=role[flag][0];
}else{
roleName=role[flag][1];
}
Up up = new Up(roleName);
int i=0;
System.out.print("你的抽数:");
int sum = scanner.nextInt();
while(i<sum){
up.clickOne();
i++;
}
up.cal();
}
}
/**
* up池算法模型
*/
class Up{
private String roleName;//up角色名称
private static int up;//抽到的up角色
private static int normal;//常驻角色
private static int all;//总抽数
private static int sum;//上次五星到现在总抽数
private static double poss;//抽到up角色概率
private static Boolean flag;//这次是否是大保底
private static ArrayList<String> count;
/**
* 默认初始化
*/
public Up(String name){
roleName=name;
up=0;
normal=0;
all=0;
sum=0;
poss= 0.006;
flag=false;
count=new ArrayList<>();
}
/**
* 单抽
*/
public void clickOne(){
String s;//记录
sum++;
all++;
updatePoss();
/**
* 生成0和1之间随机数
*/
Random random = new Random();
double v = random.nextDouble();//实际概率
if(poss>=v){
//抽取五星成功
if(flag){//大保底
System.out.println(roleName);
up++;
s=sum+roleName;
count.add(s);
flag=false;
}else{
double v1 = random.nextDouble();
if(v1>=0.5){//不歪
System.out.println(roleName);
up++;
s=sum+roleName;
count.add(s);
}else{
System.out.println("常驻角色");
normal++;
flag=true;
s=sum+"歪";
count.add(s);
}
}
sum=0;
}else{
//没抽到五星
System.out.print("普通"+" ");
}
}
/**
* 十连
*/
public void clickTen(){
int i=0;
while(i<10){
clickOne();
i++;
}
}
/**
* 更新出货概率
*/
public void updatePoss(){
if(sum<=73){
poss=0.006;
}else if(sum>=74 && sum<90){
poss=(sum-73)*0.06+0.006;
}else if(sum==90){
poss=1;
}
}
/**
* 统计情况
*/
public void cal(){
System.out.println("\n");
System.out.println("总抽数:"+all+"\t"+
"五星角色数量:"+(up+normal)+"\t"+
"up角色数量:"+up+"\t"+
"歪了:"+normal+"次"+"\t"+
"已垫:"+sum+"抽"+"\t"+
"平均:"+(all-sum)/(up+normal)+"一个金");
System.out.println(count);
}
}
[外链图片转存中…(img-2ZIZ3uRT-1679821301441)]
648拿不下满命神里也太难了,非酋实锤哈哈。