用Java模拟原神抽卡概率算法

2023-03-22  本文已影响0人  CuteMei
import java.util.Random;

public class GenshinImpactGacha {
    public static void main(String[] args) {
        int totalAttempts = 90; // 总共尝试次数
        int pityCounter = 0; // 保底计数器
        int fiveStarCount = 0; // 五星角色数量
        int fourStarCount = 0; // 四星角色数量

        for (int i = 0; i < totalAttempts; i++) {
            int rollResult = roll(); // 抽卡
            if (rollResult == 5) { // 抽到五星
                fiveStarCount++;
                pityCounter = 0;
            } else if (rollResult == 4) { // 抽到四星
                fourStarCount++;
                pityCounter++;
                if (pityCounter >= 10) { // 触发保底
                    fiveStarCount++;
                    pityCounter = 0;
                }
            } else { // 抽到三星或以下
                pityCounter++;
                if (pityCounter >= 90) { // 触发保底
                    fiveStarCount++;
                    pityCounter = 0;
                }
            }
        }

        double fiveStarRate = (double) fiveStarCount / totalAttempts * 100; // 计算五星概率
        double fourStarRate = (double) fourStarCount / totalAttempts * 100; // 计算四星概率

        System.out.printf("在%d次抽卡中,抽到了%d个五星角色,五星概率为%.2f%%。%n", 
                            totalAttempts, fiveStarCount, fiveStarRate);
        System.out.printf("在%d次抽卡中,抽到了%d个四星角色,四星概率为%.2f%%。%n", 
                            totalAttempts, fourStarCount, fourStarRate);
    }

    public static int roll() {
        Random rand = new Random();
        int randomNumber = rand.nextInt(1000) + 1; // 随机生成1-1000的整数
        if (randomNumber <= 6) { // 0.6%的概率抽到五星
            return 5;
        } else if (randomNumber <= 56) { // 5%的概率抽到四星
            return 4;
        } else { // 剩下的概率抽到三星或以下
            return 3;
        }
    }
}

该示例代码模拟了在90次抽卡中,抽到五星和四星角色的概率。其中,模拟了游戏中的保底机制:如果累计抽到了10个四星(或以上)角色,那么在接下来的一次抽卡中必定会抽到五星角色;如果累计抽到了90次抽卡但都没有抽到五星,则在第90次抽卡中必定会抽到五星角色。最终,代码运行结果输出了抽到五星和四星角色的概率。

上一篇 下一篇

猜你喜欢

热点阅读