F车模拟游戏中,怎样才能获得更多游戏奖励?,

程序员带你分析。游戏开箱的“积分赛”,真的能拿走主播的豪车吗

最近小编发现各大平台的游戏主播,都开始玩起了“积分赛”。这里我先给大家介绍一下积分赛是什么,拿CS:GO游戏举例,号主自掏腰包购买一定量的游戏盲盒。然后主播直播开启这些盲盒,众所周知游戏中的物品都存在稀有度,稀有度与物品在盲盒中出现的概率挂钩,也就是说概率越高物品稀有度越低。

言归正传,目前已知CS:GO主播开箱一般规则为开启200箱,箱子会出现蓝、紫、粉、红、金(按照稀有度从低到高排列),五种颜色当开启的盲盒出现蓝、紫色时不计分,出现粉色累加5分、红色10分、金色20分。当200箱开启完毕后根据积分获得对应的奖励。

40分:2000RMB 50分:索尼PS5 60分:苹果14 80分:苹果笔记本pro

100分:外星人笔记本 120分:苹果14*15 140分:宝马汽车 160分:奔驰E

180分:保时捷帕拉梅拉

现在小编要用程序模拟万次开箱,来看一下结果如何,但是还缺少一个参数,就是每个箱子的概率。通过CS:GO的官网查询到每个级别的概率分别为:

蓝色0.7991	紫色0.1598	粉色0.032	红色0.0065	金色0.0026

好了,现在可以开始了,我会在文章最后贴出代码,有兴趣的小伙伴可以自己尝试测试一下。

运行一次结果:


本次开箱子共得分:30

其中获得蓝色色箱子:38

其中获得紫色色箱子:158

其中获得粉色箱子 2 个,获得 10 分

其中获得红色箱子 2 个,获得 20 分

其中获得金色箱子 0 个,获得 0 分


运行1000次结果为了方便观察仅展示每次的总分数:



05分:04次----10分:04次----15分:18次----20分:27次----25分:31次

30分:46次----35分:80次----40分:86次----45分:94次----50分:93次

55分:91次---- 60分:90次----65分:80次----70分:67次----75分:56次

80分:35次----85分:28次----90分:21次----95分:14次----100分:14次

105分:5次----110分:4次----115分:5次----120分:1次----125分:1次


可以看到最高能得到的奖励仅为120分档的苹果14*15,共计获取两次。距离180分的豪车还差55分。那么需要多少次能达到180分呢?带着这个疑问我将代码改造成了死循环,只有积分达到180分才会结束,这次让我们来看看结果吧。



次数:180635

本次开箱子共得分:185

其中获得蓝色色箱子:35

其中获得紫色色箱子:146

其中获得粉色箱子 11 个,获得 55 分

其中获得红色箱子 3 个,获得 30 分

其中获得金色箱子 5 个,获得 100 分

0分:33次----5分:303次----10分:950次----15分:2366次----20分:4540次

25分:7378次----30分:10258次----35分:13134次----40分:15102次----45分:16558次

50分:16791次----55分:16318次----60分:14819次----65分:13250次----70分:11322次

75分:9393次----80分:7436次----85分:5801次----90分:4345次----95分:3154次

100分:2371次----105分:1631次----110分:1172次----115分:811次----120分:495次

125分:337次----130分:218次----135分:145次----140分:80次----145分:41次

150分:39次----155分:15次----160分:12次----165分:8次----170分:7次

175分:2次----185分:1次


这次的结果相当惊人,在第180635次才得到了185分的成绩,其中光金色就出现了5次。


这个结果不知道在多少人的预料呢?根据这个结果你觉得这个几率你可以接受吗?


最后把本次代码贴出:

   public static String CSBoxSimulation(int count){       Map<Integer,Integer> map=new HashMap<>();       StringBuffer stringBuffer=new StringBuffer();       for (int j = 0; j < count; j++) {           int totalScore = 0;           int blueCount = 0;           int purpleCount = 0;           int pinkCount = 0;           int redCount = 0;           int goldCount = 0;           Random rand = new Random();           for (int i = 0; i < 200; i++) {               double r = rand.nextDouble();               if (r < 0.7991) {                   // 开出蓝                   blueCount++;               } else if (r < 0.7991 + 0.1598) {                   // 开出紫                   purpleCount++;               } else if (r < 0.7991 + 0.1598 + 0.032) {                   // 开出粉                   pinkCount++;                   totalScore+=5;               } else if (r < 0.7991 + 0.1598 + 0.032 + 0.0065) {                   // 开出红                   redCount++;                   totalScore+=10;               } else {                   // 开出金                   goldCount++;                   totalScore+=20;               }           }           Integer integer = map.get(totalScore);           if(integer == null){               integer = 0;           }           map.put(totalScore,++integer);           stringBuffer.append(totalScore+",");           //只有180才会退出循环           if(totalScore >= 180) {           System.out.println("次数:" + j);           System.out.println("本次开箱子共得分:" + totalScore);           System.out.println("其中获得蓝色色箱子:" + purpleCount);           System.out.println("其中获得紫色色箱子:" + blueCount);           System.out.println("其中获得粉色箱子 " + pinkCount + " 个,获得 " + (pinkCount * 5) + " 分");           System.out.println("其中获得红色箱子 " + redCount + " 个,获得 " + (redCount * 10) + " 分");           System.out.println("其中获得金色箱子 " + goldCount + " 个,获得 " + (goldCount * 20) + " 分");               break;           }//           System.out.println("本次开箱子共得分:" + totalScore);//           System.out.println("其中获得蓝色色箱子:" + purpleCount);//           System.out.println("其中获得紫色色箱子:" + blueCount);//           System.out.println("其中获得粉色箱子 " + pinkCount + " 个,获得 " + (pinkCount * 5) + " 分");//           System.out.println("其中获得红色箱子 " + redCount + " 个,获得 " + (redCount * 10) + " 分");//           System.out.println("其中获得金色箱子 " + goldCount + " 个,获得 " + (goldCount * 20) + " 分");       }       map = sortMapByKey(map);       int k = 0;       for (Integer key:map.keySet()) {           k++;           Integer integer = map.get(key);           if(k % 5 == 0) System.out.println(key+"分:"+integer+"次");           else System.out.print(key+"分:"+integer+"次----");       }       return stringBuffer.toString();   }    /**     * 使用 Map按key进行排序     * @param map     * @return     */    public static Map<Integer, Integer> sortMapByKey(Map<Integer, Integer> map) {        if (map == null || map.isEmpty()) {            return null;        }        Map<Integer, Integer> sortMap = new TreeMap<Integer, Integer>(                new MapKeyComparator());        sortMap.putAll(map);        return sortMap;    }    static class MapKeyComparator implements Comparator<Integer>{        @Override        public int compare(Integer str1, Integer str2) {            return str1.compareTo(str2);        }    }

2024-04-28

后面没有了,返回>>电动车百科