基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析

基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析

前言

最近,枪战王者更新了一个新的礼包玩法——王者飞行棋,玩法看着非常诱惑,但实际玩一局需要多少钱呢?我根据相关玩法规则,写了一个Matlab仿真程序,通过这个程序,我们共同来探究一下,一共需要多少钻石,才能拿到喜欢的那把在终点的武器

仿真假设

模型中的一些假设如下:
1、因为只有前20个骰子是125个钻石一个,而骰子打包10个一起买的价格是2380,所以模型中假设投一次骰子需要238个钻石。
2、因为不知道概率进终点的概率到底是多少,按照马哥尿性,假设此概率为0,即必须转够20圈才能进入终点。
3、因为不同的起点用的地图是一样的,只是顺序不一样,所以模型所假设的以蓝色为起点,与以它颜色作为起点是等效的,结果应该相差无几。
4、为了得到更普遍的情况,仿真时一共进行了1e7(即一千万)局。

部分仿真结果

我知道各位看这篇文章是为了什么,所以把仿真结果的钻石部分提前放在这里,详细结果请到文章末尾观看。

仿真结果以(平均值±标准差)的形式表示:
完成一局游戏(指到达终点)所需要的钻石为:17023.1237 ± 1596.9012个
根据3σ准则:
数值分布在(μ-σ,μ+σ)中的概率为0.6827
数值分布在(μ-2σ,μ+2σ)中的概率为0.9545
数值分布在(μ-3σ,μ+3σ)中的概率为0.9973
也就是说:所需要的钻石
分布在15426~18620的概率为68.27%;
分布在13829~20217的概率为95.45%;
分布在12232~21814的概率为99.73%。

相关界面

王者飞行器游戏界面
基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析
骰子购买界面
基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析

仿真程序

~仿真时使用的软件是Matlab R2018a~

小声吐槽一下,竟然没有Matlab的语法高亮,只能用java的凑合一下。

%{
    本项目用于分析枪战王者手游,王者飞行器游戏的相关收获与付出
    另外,因为官方并没有公开在四个特殊点处进入终点的概率,所以假设这个概率为0
%}
die = 1e7;  %尝试的次数

times_each = zeros(1,die);  %每局丢骰子次数
dia_eaca = zeros(1,die); %每局需要的钻石数
dia_each = zeros(1,die);    %每局当前的钻石数,如果负数则表示消耗的钻石数
shishen_each = zeros(1,die);%每局获得M4A1——死神的次数
baolei_each = zeros(1,die); %每局获得加特林——堡垒的次数
jingtong_each = zeros(1,die);%每局获得的精通点
bfzcbx_each = zeros(1,die); %每局获得冰封珍藏宝箱的个数
mlj_each = zeros(1,die);    %每局获得马来剑——毁灭的次数
dszc_each = zeros(1,die);   %每局获得大圣珍藏宝箱的个数
hmzc_each = zeros(1,die);   %每局获得毁灭珍藏宝箱的个数
shayin_each = zeros(1,die); %每局获得沙鹰——修罗永久的次数
dyhzc_each = zeros(1,die);  %每局获得地狱火珍藏的个数
scste_each = zeros(1,die);  %每局获得双持斯泰尔——天使的次数
parfor i = 1:die
    dia = 0;    %当前的钻石数,如果负数则表示消耗的钻石数
    place = 1;  %当前旗子的位置
    shishen = 0;%获得M4A1——死神的次数
    baolei = 0; %获得加特林——堡垒的次数
    jingtong = 0;   %获得的精通点
    bfzcbx = 0; %获得冰封珍藏宝箱的个数
    mlj = 0;    %获得马来剑——毁灭的次数
    dszc = 0;   %获得大圣珍藏宝箱的个数
    hmzc = 0;   %获得毁灭珍藏宝箱的个数
    shayin = 0; %获得沙鹰——修罗永久的次数
    dyhzc = 0;  %获得地狱火珍藏的个数
    scste = 0;  %获得双持斯泰尔——天使的次数
    %开始丢骰子
    round = 0;  %当前的圈数
    times = 0;
    while 1
        times = times + 1;
        place = place + unidrnd(6);
        dia = dia - 238;    %每投一次需要238个钻石
        if place >= 25  %如果大于等于25说明转了一圈
            place = place - 24;
            round = round + 1;
        end
        if round == 20	%20圈就必然进入终点
            break;
        end
        switch place
            case 1
                dia = dia + 280;
            case 2 
                shishen = shishen + 1;
            case 3
                dia = dia + 150;
                place = place + 6;
            case 4
                baolei = baolei + 1;
            case 5
                jingtong = jingtong + 1000;
            case 6
                dia = dia + 100;
            case 7
                dia = dia + 280;
            case 8
                bfzcbx = bfzcbx + 2;
            case 9
                dia = dia + 150;
                place = place + 6;
            case 10
                mlj = mlj + 1;
            case 11
                dszc = dszc + 2;
            case 12
                dia = dia + 100;
            case 13
                dia = dia + 280;
            case 14
                hmzc = hmzc + 1;
            case 15
                dia = dia + 150;
                place = place + 6;
            case 16
                shayin = shayin + 1;
            case 17
                dyhzc = dyhzc + 2;
            case 18
                dia = dia + 100;
            case 19
                dia = dia + 280;
            case 20
                hmzc = hmzc + 1;
            case 21
                dia = dia + 150;
            case 22
                scste = scste + 1;
            case 23
                dszc = dszc + 1;
            case 24
                dia = dia + 100;
        end
    end
    times_each(i) = times;
    dia_each(i) = dia;
    shishen_each(i) = shishen;
    baolei_each(i) = baolei;
    jingtong_each(i) = jingtong;
    bfzcbx_each(i) = bfzcbx;
    mlj_each(i) = mlj;
    dszc_each(i) = dszc;
    hmzc_each(i) = hmzc;
    shayin_each(i) = shayin;
    dyhzc_each(i) = dyhzc;
    scste_each(i) = scste;
end
disp(['一共进行了' num2str(die) '局']);
disp(['钻石_平均±标准差=' num2str(mean(dia_each)) ' ± ' num2str(std(dia_each))]);
disp(['死神_平均±标准差=' num2str(mean(shishen_each)) ' ± ' num2str(std(shishen_each))]);
disp(['堡垒_平均±标准差=' num2str(mean(baolei_each)) ' ± ' num2str(std(baolei_each))]);
disp(['精通_平均±标准差=' num2str(mean(jingtong_each)) ' ± ' num2str(std(jingtong_each))]);
disp(['冰封箱_平均±标准差=' num2str(mean(bfzcbx_each)) ' ± ' num2str(std(bfzcbx_each))]);
disp(['马来剑_平均±标准差=' num2str(mean(mlj_each)) ' ± ' num2str(std(mlj_each))]);
disp(['大圣箱_平均±标准差=' num2str(mean(dszc_each)) ' ± ' num2str(std(dszc_each))]);
disp(['毁灭箱_平均±标准差=' num2str(mean(hmzc_each)) ' ± ' num2str(std(hmzc_each))]);
disp(['沙鹰_平均±标准差=' num2str(mean(shayin_each)) ' ± ' num2str(std(shayin_each))]); 
disp(['地狱火箱_平均±标准差=' num2str(mean(dyhzc_each)) ' ± ' num2str(std(dyhzc_each))]); 
disp(['斯泰尔_平均±标准差=' num2str(mean(scste_each)) ' ± ' num2str(std(scste_each))]); 
disp('~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~');
disp(['钻石_方差=' num2str(var(dia_each))]);
disp(['死神_方差=' num2str(var(shishen_each))]);
disp(['堡垒_方差=' num2str(var(baolei_each))]);
disp(['精通_方差=' num2str(var(jingtong_each))]);
disp(['冰封箱_方差=' num2str(var(bfzcbx_each))]);
disp(['马来剑_方差=' num2str(var(mlj_each))]);
disp(['大圣箱_方差=' num2str(var(dszc_each))]);
disp(['毁灭箱_方差=' num2str(var(hmzc_each))]);
disp(['沙鹰_方差=' num2str(var(shayin_each))]); 
disp(['地狱火箱_方差=' num2str(var(dyhzc_each))]); 
disp(['斯泰尔_方差=' num2str(var(scste_each))]); 

figure(1);
title('每局需要消耗的钻石散点图');
plot(dia_each,'.');
figure(2);
title('每局丢骰子次数散点图');
plot(times_each,'.');

运行结果

以下为程序的详细运行结果,表示在玩一局完整的飞行棋后的收获。
结果同样使用(平均值±标准差)的形式表示。
钻石的负号表示需要消耗钻石。

一共进行了10000000局
钻石_平均±标准差=-17023.1237 ± 1596.9012
死神_平均±标准差=5.6936 ± 2.0133
堡垒_平均±标准差=4.5207 ± 1.8745
精通_平均±标准差=4457.2663 ± 1862.6936
冰封箱_平均±标准差=7.7521 ± 3.5388
马来剑_平均±标准差=4.5666 ± 1.8765
大圣箱_平均±标准差=14.4385 ± 4.2696
毁灭箱_平均±标准差=9.014 ± 2.7976
沙鹰_平均±标准差=4.4402 ± 1.86
地狱火箱_平均±标准差=8.8393 ± 3.7125
斯泰尔_平均±标准差=5.1688 ± 1.9569
~~~~~~~~~~~~~~~~~~~~~华丽的分割线~~~~~~~~~~~~~~~~~~~~~
钻石_方差=2550093.496
死神_方差=4.0535
堡垒_方差=3.5138
精通_方差=3469627.3779
冰封箱_方差=12.5233
马来剑_方差=3.5212
大圣箱_方差=18.2297
毁灭箱_方差=7.8267
沙鹰_方差=3.4596
地狱火箱_方差=13.7824
斯泰尔_方差=3.8296

还有
每局需要消耗的钻石散点图
基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析
每局丢骰子次数散点图
基于Matlab的穿越火线-枪战王者(CF手游)王者飞行棋礼包收支分析

后语

不知道各位觉得我的分析对不对,玩这个王者飞行棋值不值呢?欢迎在评论区留言。