用Java实现原神抽卡算法

这篇具有很好参考价值的文章主要介绍了用Java实现原神抽卡算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

哈喽~大家好,好久没有更新了,也确实遇到了很多事,这篇开始恢复更新,喜欢的话,可以给个的三连,什么?你要白嫖?那可以给个免费的赞麻。

 🥇个人主页:个人主页​​​​​               

🥈 系列专栏:【JAVASE开发】

🥉与这篇相关的文章:              

【JAVA凝气】异常篇

【JAVA凝气】异常篇_程序猿追的博客-CSDN博客
Java测试、反射、注解 Java测试、反射、注解_java测试类注解_程序猿追的博客-CSDN博客
【JAVASE开发】带你零基础学JAVA项目(学生管理系统篇) 【JAVASE开发】带你零基础学JAVA项目(学生管理系统篇)_程序猿追的博客-CSDN博客

号外号外,我最近发现了一个非常棒的人工智能学习网站,它的内容通俗易懂,风趣幽默,让人印象深刻。我想和大家分享这个网站,点击链接即可访问。 

目录

一、前言

 二、效果演示

 三、具体代码

四、到底夺少抽才能双金?


一、前言

本篇文章将会用Java模拟原神抽卡,先说结论, 再来分析。

在 [1,73] 抽时, 每次出五星角色的概率为 0.6% , 在 [74,90] 抽每次抽卡概率比上次高 6% 。

当获取到五星角色时, 有 50% 概率是UP角色, 若这次五星没有抽到UP角色, 下次五星角色必定是UP角色。五星角色保底为 90 抽, 五星UP角色保底为 180 抽。

4星物品(武器和角色)基础概率为5.1%,包括保底的概率为13%,最多10次保底4星物品(角色或者武器)。当获得4星物品时有50%的几率为UP角色。

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

角色池抽卡概率递增表

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

 二、效果演示

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

 用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

 用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

 三、具体代码

    public static void ou(int a) {
        if (a <= 10)
            System.out.println("\33[93;1m终极无敌至尊欧皇!!\33[0m");
        else if (a <= 30)
            System.out.println("\33[93;1m大欧皇!\33[0m");
        else if (a <= 50)
            System.out.println("\33[95;1m欧皇\33[0m");
        else if (a <= 70)
            System.out.println("\33[94;1m欧非守恒\33[0m");
        else if (a <= 80)
            System.out.println("\33[91;1m非酋\33[0m");
        else if (a <= 85)
            System.out.println("\33[91;1m大非酋!\33[0m");
        else if (a <= 90)
            System.out.println("\33[91;1m终极无敌至尊非酋王!!\33[0m");
    }
package com.YSCKXM;

import java.util.Scanner;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        Random r = new Random();
        Scanner sc = new Scanner(System.in);
        int a = 0, i = 0;
        int jin = 0, zi = 0, P = 0, L = 0, jinCount = 0;
        int ys = 0;
        int sum = 0;
        int[] logs = new int[200];
        while (true) {
            System.out.println("原石:" + ys);
            System.out.println("请选择");
            System.out.println("A-单抽");
            System.out.println("B-十连");
            System.out.println("C-氪648");
            System.out.println("D-查询抽卡记录");
            System.out.println("其它-退出");
            char c = sc.next().charAt(0);
            switch (c) {
                case 'A':
                    if (ys >= 160) {
                        a = 1;
                        ys -= 160;
                    } else {
                        a = -2;
                        System.out.println("\33[91;1m原石不足,请充值!\33[0m");
                    }
                    break;
                case 'B':
                    if (ys >= 1600) {
                        a = 10;
                        ys -= 1600;
                    } else {
                        a = -2;
                        System.out.println("\33[91;1m原石不足,请充值!\33[0m");
                    }
                    break;
                case 'C':
                    a = -2;
                    ys += 6480;
                    System.out.println("\33[92;1m充值成功!\33[0m");
                    break;
                case 'D':
                    a = -2;
                    if (logs[0] != 0) {
                        System.out.print("\33[96;1m抽卡记录:\33[0m");
                        for (i = 0; i < L; i++) {
                            sum += logs[i];
                            System.out.print(logs[i] + " ");
                        }
                        sum = sum / L;
                        System.out.println("");
                        System.out.println("\33[96;1m平均出金:\33[0m" + sum);
                        ou(sum);
                    } else
                        System.out.println("\33[37;1m暂未出金\33[0m");
                    break;
                default:
                    return;
            }
            if (a == -2) continue;
            for (i = 0; i < a; i++) {
                int num1 = r.nextInt(1000) + 1;
                int num2 = r.nextInt(1000) + 1;
                if (jin >= 89 || (num1 > 0 && num1 <= 6 && jin <= 72) || ((num1 > 0 && num1 <= 6 + (jin - 72) * 60) && jin >= 73)) {
                    System.out.print("\33[93;1m金\33[0m ");
                    {
                        P = jin + 1;
                        logs[L] = P;
                        L++;
                        jinCount++;
                        jin = 0;
                        zi++;
                    }
                } else if ((zi >= 9 || (num2 >= 1 && num2 <= 51 && zi <= 7) || (num2 >= 1 && num2 <= 561 && zi == 8))) {
                    System.out.print("\33[95;1m紫\33[0m ");
                    zi = 0;
                    jin++;
                } else {
                    System.out.print("\33[94;1m蓝\33[0m ");
                    jin++;
                    zi++;
                }
            }
            System.out.println(jin + "\33[37;1m抽未出金\33[0m");
            if (P != 0) {
                if (jinCount == 1)
                    System.out.println("\33[96;1m第\33[0m" + P + "\33[96;1m抽出金\33[0m");
                else if (jinCount >= 1)
                    System.out.println(jinCount + "\33[93;1m连金\33[0m");
                jinCount = 0;
                ou(P);
                P = 0;
            }
        }
    }

}

四、到底夺少抽才能双金?

改一个分支条件,flag 是开关, 这时我们的原石数量是无限,循环一直抽下去。

                    else if (jinCount >= 1 && jin == 2 && P == 10)
                    {
                        System.out.println("第" + jinCount + "抽出了\33[93;1m连金\33[0m");
                        jinCount = 0;
                        P = 0;
                        flag = 1;
                    }

运行结果(仅供参考,具体以实际为准,反正我还没双金过,呜呜呜) 

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

========================================分割线=================================2023-09-06 更新

好消息我也有双金了,坏消息是常驻出的

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

1200抽出的,感觉模拟双金概率还算挺准确的,后续会优化

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言

不积跬步无以至千里,趁年轻,使劲拼,给未来的自己一个交代!向着明天更好的自己前进吧!

用Java实现原神抽卡算法,# JAVASE开发,java,开发语言文章来源地址https://www.toymoban.com/news/detail-655895.html

到了这里,关于用Java实现原神抽卡算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • JavaSE——初始java

    目录 一.Java是什么 二.Java语言的特性 1. 简单性 2. 面相对象 3. 分布式(微服务) 4. 健壮性 5. 安全性 6. 体系结构中立 7. 可移植性 8. 解释性 9. 高性能 10. 多线程 11. 动态性 三.JDK环境配置 1.简介 2.安装  3.配置 4.检验 四.第一个Java程序 1.初始程序 2.运行程序 3.JDK、JRE、JVM三者之间的

    2023年04月08日
    浏览(40)
  • 【JavaSE】初识java

    目录 Java语言概述 Java是什么 Java语言重要性 语言广泛使用程度 工作领域 在校招中的岗位需求​编辑 Java语言发展简史 Java语言特性 ​编辑Java开发环境安装 初识Java的main方法 main方法示例 运行Java程序 JDK、JRE、JVM之间的关系 注释 基本规则 注释规范 标识符 ​编辑 总结

    2024年02月16日
    浏览(38)
  • 【JavaSE】Java的反射机制

    1.java反射机制 1.1简介 被视为动态语言的关键,允许程序在执行期间,借助于RefectionAPI取得任何类的内部信息。在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个类对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方

    2024年04月26日
    浏览(41)
  • 【JavaSE】Java方法的使用

    【本节目标】 1. 掌握方法的定义以及使用 2. 掌握方法传参 3. 掌握方法重载 4. 掌握递归 目录 1.方法概念及使用 1.1什么是方法(method) 1.2 方法定义 1.3 方法调用的执行过程 1.4 实参和形参的关系 2. 方法重载 2.1 为什么需要方法重载 2.2 方法重载概念 3. 递归 3.1 生活中的故事 3.2 递

    2024年02月12日
    浏览(40)
  • 【JavaSE】第一个Java程序

    在JavaSE的系列中,将从第一个Java程序开始叙述,系统的把JavaSE的内容总结一次。毕竟这是第二次学习JavaSE的内容,因此感触也相对比较深一些。在JavaSE的初步计划中,大概有十一到十三篇文章,大致有:第一个Java程序、变量与运算符、流程控制、面向对象(封装、继承、多

    2024年01月22日
    浏览(38)
  • 【JavaSE】java刷题--数组练习

    本篇讲解了一些数组相关题目(主要以代码的形式呈现),主要目的在于巩固数组相关知识。 上一篇 数组 讲解了一维数组和二维数组的基础知识~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 思路 首先要判断 空指针和空数组 的情况,利用 字符

    2024年04月10日
    浏览(43)
  • Java面试整理(二)《JavaSE》

    说明:我会根据我自己的经验,给每个内容标注重要程度,共有三个等级:低、中、高。仅个人参考意见。 JVM是Java Virtual Machine的缩写,是用于运行Java字节码的虚拟机,JVM是运行在操作系统之上,这也是Java程序为什么能够运行在不同的平台或操作系统的原因。 JVM是Java语言

    2024年02月09日
    浏览(32)
  • 【JavaSE】Java基础语法(十三):Java 中的集合(十分全面)

    List (对付顺序的好帮⼿): 存储的元素是有序的、可重复的。 Set (注重独⼀⽆⼆的性质): 存储的元素是⽆序的、不可重复的。 Queue (实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。 Map (⽤ key 来搜索的专家): 使⽤键值对(key-value)存

    2024年02月10日
    浏览(42)
  • 【JavaSE】Java入门九(异常详解)

    目录 异常  1.Java中异常的体系结构 2.异常的处理 3.自定义异常类        在Java中,将程序执行过程中发生的不正常行为称为异常,C语言中没有这个概念,接下来我们重点需要掌握异常处理体系(try, catch, throw, finally)以及如何自定义异常类。 异常的种类繁多,Java内部维护了

    2024年02月03日
    浏览(41)
  • 【JavaSE】Java基础语法(十八):接口

    接口就是一种公共的规范标准,只要符合规范标准,大家都可以通用。 Java中接口存在的两个意义 用来定义规范 用来做功能的拓展 接口用interface修饰 类实现接口用implements表示 接口不能实例化 我们可以创建接口的实现类对象使用 接口的子类 要么重写接口中的所有抽

    2024年02月06日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包