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

基于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 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

还有
每局需要消耗的钻石散点图
每局需要消耗的钻石散点图
每局丢骰子次数散点图
每局丢骰子次数散点图

后语

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

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
matlab版星之咏叹类似雷电的纵版射击游戏-Stellaria Demo App 1.4.0.rar 本帖最后由 stellari 于 2012-9-25 15:24 编辑 本人近来无事,业余写得一款射击游戏。 从画面到游戏风格都是有意识模仿《雷电》的, 但是由于水平和素材的限制,最后成品不是很像,请谅解。 中上配置的电脑应该都能流畅运行,我的联想G460本上在某些敌机过多的场景会略卡。 * 本游戏以“纯”MATLAB写成:不需任何工具包,没有使用任何其他语言* 安装方法: --------- 1. 普通版本 解压附件中的 StellariaTechDemoB20120924.rar 压缩包, 将得到的所有文件放在一个文件夹中(比如该文件夹叫做StellariaTechDemo)即可。 (可以将该文件夹和其子文件夹添加至路径列表中,但这步现在不是必需的了。 2. App版本(仅适用于MATLAB R2012b): 解压附件中的 Stellaria Demo App 1.4.0.rar 在MATLAB主窗口的顶部的选项卡中选择Apps 然后点工具条栏左侧的Install App,在弹出的窗口中选择刚才解压出的文件即可。 运行方法: --------- 普通版本:运行StellariaTechDemo文件夹中的stl_StellariaMain App版本:在Apps面板中的Apps栏内选择Stellaria Demo即可 操作方法: --------- 1P: WSAD - 方向, u - 子弹, i - 炸弹 2P: 方向键 - 方向, insert - 子弹, delete - 炸弹 p - 暂停游戏 1,2 - 1P或2P开始游戏。 更新日志 ----------- 2012\09\25   * 删除了冗余的音乐素材文件 2012\09\24   * 加入App版本(仅R2012b下可用) 2012\09\10   * 现在不需要用户手动添加子目录了,解压后直接运行stl_StellariaMain即可。   * 现在在标题画面和结尾画面时可以直接关闭窗口,不会报错。   * 在游戏中试图关闭窗口,游戏会暂停并提示用户确认退出。若选No(默认)的话游戏会继续进行。 已确认的Bug: --------- 1. MATLAB2010b之前的用户可能会遇到下列错误(已修正): ??? Undefined function or method 'plus' for input arguments of type 'uint64'. Error in ==> stl_StellariaMain at 221                   stageStartTime = stageStartTime pauseElapsedTime.* timer2sec; 解决方案: 将stl_StellariaMain中的221行改为: stageStartTime = uint64 pauseElapsedTime.*timer2sec); 2. 如果遇到下列错误(已修正): ??? Error using ==> eval   Undefined function or variable 'stl_STAGE_TitleScreen'. Error in ==> stl_StellariaMain at 118   bkgMusicPlayer = eval; 请将stl_StellariaMain所在的目录和该目录的所有子目录添加到MATLAB搜索路径中去即可。 --- 用户报告的Bug -- 1. 暂停一段时间后再恢复游戏,在短时间内游戏速度会变得飞快,就像是要赶上刚才暂停时落下的进度一样。    解决方案:未知。 2. 某些文字是倒着的。    解决方案:未知 3. 按1\2键无法开始游戏。    解决方案:请确认中文输入已关闭(感谢会员rihkddd指出);且必须按键盘左上角的1,2键才能进入游戏,按小键盘中的数字键无效。 -- 如有任何问题请跟帖。 谢谢!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值