百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

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

toyiye 2024-06-21 12:09 9 浏览 0 评论

最近小编发现各大平台的游戏主播,都开始玩起了“积分赛”。这里我先给大家介绍一下积分赛是什么,拿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);
        }
    }

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码