zoukankan      html  css  js  c++  java
  • 捕鱼游戏捕杀计算公式的设计思路

    本文转载自: http://www.aiweibang.com/yuedu/89054024.html

    (只作转载, 不代表本站和博主同意文中观点或证实文中信息)

    公司最近准备做一款以植物大战僵尸为素材的捕鱼类游戏,初期讨论的时候发现大家的思路都比较混乱。本人通过一段时间玩捕鱼之后,大致规划了一个捕杀的计算公式。大家可以参考一下,也欢迎各位朋友指出不足和漏洞。

    1、基础计算公式

    以1个玩家,单个豌豆(消耗1金币,攻击为1)攻击单个普通僵尸(获得10金币,生命为10)作为基础模型。

    假设每次攻击100%击杀僵尸,需要达到收支平衡:

    攻击子弹消耗(投入)I = 击杀僵尸获利(产出)E

    某一时刻:

    当I>E时,收入大于产出,玩家前越打越少,玩家亏钱公司赚钱,反之。

    当I=E时,不输也不赢,玩家可以持续游戏。

    当1颗豌豆杀死一个僵尸,消耗1金币,获得10金币,玩家净收入为9金币。

    每次攻击并非必定杀死僵尸,则需要计算一颗子弹杀死僵尸的概率:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    则概率期望到达的平衡公式为:

    投入I=击杀概率KP×产出E

    带入概率公式则平衡公式为:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    当1颗攻击为1的豌豆,攻击生命为10的僵尸,击杀概率为10%,则可以达到期望平衡。

    某一时刻:

    要I>E,则调低豌豆攻击,或调高僵尸生命,使概率低于10%,则可以达到理论上的公司盈利。

    实际情况模式:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    (模拟500次后的收入产出图,红色为投入、绿色为产出)

    实际结果,有100多次产出过高和过低的情况(时间越后越明显)。所以纯随机不好控制,需要进行实时调整。


    2、实时调整

    对概率进行调整,收入过高时降低概率,收入过低时提高概率,则对概率进行调整,增加实时调整参数AP(-10%<AP<10%):

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    则击杀概率调整为:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 当收入过高,降低AP,降低僵尸击杀率,造成玩家纯收入锐减。

    • 当收入过低,提高AP,提高玩家收入,避免玩家流失。

    • 游戏初期,提高AP,提高金币产出,增加玩家收入,强化爽快感,吸引玩家持续游戏。

    • 游戏中期,适度调高和调低AP,造成收入波峰波谷(类似股票),吸引玩家充值,同时提高游戏黏度。

    • 游戏后期,降低AP,提高玩家冲击高分的难度,强化玩家之前的比拼,吸引玩家充值,提高收入。

    AP调整为游戏中根据玩家收支情况实时调整,不影响整体数据模型!

    单个玩家的AP调整仅对单个玩家有效:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    (波峰波谷,红色为投入、绿色为产出)


    3、武器定价

    豌豆射手每次发射一颗豌豆,击中一个普通僵尸。

    豌豆射手(1金币)击杀普通僵尸(10金)的几率是10%。

    一颗豌豆对于普通僵尸的期望价值为1金币(10*10%),平衡公式为:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    以豌豆射手为基本模型,确定其他几种武器的定价:

    数量优势

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 仙人掌每次发射4颗钉刺,每个钉刺刺中一个普通僵尸

    • 仙人掌的攻击效率约为豌豆射手的3~4倍(不一定每发都中)

    • 则每次使用仙人掌消耗的金币可定为4金币(具体数值以实际调整后为准)

    威力优势

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 火焰豌豆射手每次发射一颗火焰豌豆,威力是普通豌豆的2倍,击中一个普通僵尸

    • 火焰豌豆射手击杀普通僵尸的几率是20%(PA提高2倍)

    • 一颗火焰豌豆对于普通僵尸的期望价值为2金币(10*20%)

    • 则每次使用仙人掌消耗的金币可定为2金币(几率提高到20%以后会大幅度增加收益,可设置略高价值)

    随机优势

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 西瓜大炮每次发射一颗西瓜,西瓜击僵尸后爆炸,波及若干个僵尸。

    • 西瓜大炮每次攻击的僵尸数量不确定,需要进行测试后确定平均值。

    • 因为这种高级武器,在比赛场等不注重效率但注重数量的模式(击杀越多排名越高)中有优势,所以可以提高定价。

    随着版本更新,增加新的武器,其攻击方式和攻击效率都要和基本模型(豌豆射手)进行对比,确定其理论收益。

    理论收益成立后,经过实际测试、微调,使每种大炮单位金币期望价值基本相同。

    4、概率调整

    经过基础计算公式,可以得出武器攻击僵尸的收益比:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    带入击杀概率公式:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    (由于实时定价参数为暂时影响,为了简化计算去除)

    • IR的理论值应该为1,则该武器攻击该僵尸收支相等

    • IR>1,则该武器攻击该僵尸,玩家亏钱

    • IR<1,则玩家赚钱

    武器数据

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    僵尸数据

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    代入我们上的所有僵尸和武器数据后,可得矩阵:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    游戏正式上线后,PG(武器价格)、ZG(僵尸掉落)为固定值,不能随意变化。

    由于游戏模式、刷新僵尸机制、玩家数量的不确定因素,可能会造成某个IR过高或过低。或是由于运营或游戏性的需要,有意提高或降低某个武器和某个僵尸的IR值。则只需要调整ZH(僵尸生命)、PA(子弹攻击),就可以调整该武器攻击该僵尸的收支水平。

    5、抽水放水期

    根据游戏整体的收支情况,我们可以设定整个平台的抽水和放水。

    • 抽水期,玩家击杀僵尸的概率普遍降低,投入金币量高于产出金币量。

    • 放水期,投入低于产出。

    抽放水参数TP的调整方法类似实时调整参数AP:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    则击杀概率调整为:

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 当TP>0,则此时为放水期

    • 当TP<0,则此时为抽水期

    • 建议TP的取值范围为-5%<TP<5%(具体数值以实际调整后为准)

    TP调整对整个平台的玩家有效

    抽水放水调整以1天为期进行调整,游戏上线初期或版本更新缩短至3小时或6小时,版本稳定后放宽时间

    服务器设置收支预警(收入严重小于持续),预警后自动调整抽水。

    6、小黑屋

    某些玩家由于某些原因,获得了超量的收益,因为平台收入和游戏平衡,需要将其纳入“小黑屋”。

    被纳入小黑屋的玩家,其击杀概率被大幅度降低。

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    • 建议BP的取值为BP<-10%(具体数值以实际调整后为准)

    • KP被降低至负数则为0

    取消小黑屋条件有两种:

    • 游戏时间:玩家进行一段时间游戏后,自动解除小黑屋状态。

    • 玩家投入金币数:玩家投入一定量金币后,解除小黑屋。


    7、倍数

    倍数:玩家可选择倍数,提高子弹的消耗N倍,击杀僵尸后获得的金币量N倍。

    例如,1倍下,豌豆消耗1金币,杀死僵尸获得10金币。10倍下,豌豆消耗10金币,杀死僵尸获得100金币。

    倍数设置值为1倍、2倍、5倍、10倍、20倍、50倍、100倍。

    玩家开启某个倍数,受其等级限制、房间上限倍数限制。

    8、房间概率调整

    我们将房间分为初级、中级、高级三种房间。根据其房间的定位,调整在该房间内,玩家击杀僵尸的概率:

    • 初级房:只能使用低倍数,提高击杀概率,随便打打就可以赢钱。

    • 中级房:可以调整高低倍数,平衡击杀概率,掌握技巧可基本收支平衡。

    • 高级房:可以开启最高倍数,略微降低击杀概率,赚得多赔得多。

    加入房间参数RP后,击杀概率公式被调整为

    <ignore_js_op style="margin: 0px; padding: 0px; max- 100%; box-sizing: border-box !important; word-wrap: break-word;">

    建议初级房的RP为+10%,中间房为0,高级房为-8%(数值可配置,具体数据以实际调整后为准)。

  • 相关阅读:
    Pycharm在线/手动离线安装第三方库-以scapy为例(本地离线添加已经安装的第三方库通过添加Path实现)
    python+splinter实现12306网站刷票并自动购票流程
    利用RELK进行日志收集
    web安全之文件上传漏洞攻击与防范方法
    C# 使用 CancellationTokenSource 终止线程
    ASP.NET MVC 下拉框的传值的两种方式
    SQL Server(解决问题)已成功与服务器建立连接,但是在登录过程中发生错误。(provider: Shared Memory Provider, error:0
    C# .net中json字符串和对象之间的转化方法
    asp.net 未能加载文件或程序集“WebApi”或它的某一个依赖项。试图加载格式不正确的程序。
    将博客搬至CSDN
  • 原文地址:https://www.cnblogs.com/yzjn/p/6229692.html
Copyright © 2011-2022 走看看