一款捕鱼游戏是怎样被设计出来的
Part1:
游戏的介绍:
捕鱼游戏,是一款通过发射子弹捕获鱼从而获取金币的“概率”游戏,市面上流行最早应该在2005年左右,街机厅风靡社会的时候就出现了,具体什么时间面向市场的也不清楚,现在移动端盛行的年代,街机厅的大部分游戏也被移植到了手机上。捕鱼游戏也不例外。
游戏的核心:
游戏本质是一个“概率”游戏,不同的开发商通过不同算法或者产品模式会改变这个规则,有的可能使用的是“弹夹概率机制”,有的使用是“伪随机概率机制”,有的使用是“养猪杀猪式”;
我这里采用的是伪随机概率机制作为游戏的核心算法,在这里就不介绍其它方式了,不是特别熟悉,仅仅有接触。
--------
Part2:
基础的数值以及内容:
伪随机概率机制即:
通过程序的随机数判断玩家是否可以捕获鱼儿,计算方式有很多种了,我采用的是纯随机+生命值的算法
假设一只鱼儿的生命值是10(返奖金额=生命值10),子弹的伤害值为1,则捕获的概率=1/10=10%
(这是我使用的核心基础算法,所有的后期扩展都是在该基础上进行调整或者波动)
那么原则上,一条10分的鱼,10%概率捕获,返奖10,是一个返奖率为100%的标准模型
这样在基础算法有了的前提下,一个粗略的捕鱼环境就有了。有了1~10分的小鱼,10~50分的大鱼,50-100分的大鱼,那么捕鱼的基础生态就算完成了。
定义一下使用参数的名称:
鱼的生命值(HP)、炮台的伤害值(A);得 捕获概率公式=
金币获得(G)=(HP);
当G>HP时,即回报率>100%俗称放水——玩家体验就是打鱼好打了
当G<HP时,即回报率<100%俗称抽水——玩家体验就是打鱼难打了
以上回报率在100%左右时,实际体验中并没有什么变化,想要明显提升玩家打鱼的感受,还需要很多辅助功能去实现,为了保障系统的稳定性以及可观测性,我采用了单独模块去调控,而不是直接把回报率向上提升
(直接提高回报率:可以降低鱼分值,也可以调整玩家的子弹伤害,总体上需要可观测具体的投放值,来给自己的系统制作一套衡量标准,后续调整时也有一定的参考体系)
关于抽水的这个问题
1.我在设计捕鱼游戏时,并没有刻意引入这个观念,因为自从看过了永乐老师的“久赌无赢家”视频——》》久赌必输
2.做游戏,本身就是一个娱乐的过程,业内所采取的“抽水”“放水”需要精细化调整,粗狂的数值设计只会把这整体游戏体验变的更糟,所以在设计游戏时并没有引入这个概念
3.很多养猪杀猪式的游戏(或者不该称这些产品为游戏),前期会放许多水让玩家盈利,后期疯狂抽水,把玩家坑到不断付费的过程(有些菠菜游戏,请您放过捕鱼,这本身可以是一款可以有更多拓展内容的游戏题材)
根据以上相关了解后
我给自己的产品定位:在保持理论公平随机的情况下,增加玩家在游戏中的乐趣,通过丰富的玩法来加强随机数与玩家之间的博弈
这也是捕鱼游戏的炮台倍率扩张的由来:由1倍炮——>1万倍炮甚至更高,由于捕鱼游戏的核心货币是【金币】,游戏中通过子弹发射即发射【金币】,通过博弈来希望获得更多的金币以及体验游戏中各种特色鱼类玩法,所以通常炮台的倍率范围和游戏的货币体系是紧密联系的,游戏的货币价值直接会影响到游戏的【充值收入】,所以为了运营一款长久的捕鱼游戏,不建议大家采取疯狂贬值、充值赠送的模式,这样当系统里的玩家都是亿万富翁时,很难再去把控整体上贫富差距。
一款捕鱼游戏,我搭建的整体游戏模型是:
后面会陆陆续续介绍这些功能模块对应的玩家生命值周期成长,回到基本数值部分
1.上面第一部分介绍了我采用的基础捕鱼算法,这部分基础算法可以满足所有普通鱼的数值搭配,即大鱼和小鱼的区分仅仅是生命值和回报率的扩大化,通过不同的表现形式展示给玩家而已。
鱼的分值大小与玩家的回本周期存在一定关系,当鱼分整体偏高时,玩家所需要的金币数需要较多才能“保障”他可以捕获到鱼,反之鱼的分值越小,玩家所需要的金币数需要较少即可“保障”他可捕获到鱼
2.炮台的倍率同时也会在此基础上放大玩家所需要消耗的金币,所以在设计房间时,采取以上两个因素,决定房间的【倍率限制】【资产限制】——》【鱼的种类】,这样可以尽可能的让不同的房间区分开不同的“游戏感觉”
---------------------------------
Part3:
刷鱼的相关数值配置框架——》有了鱼:
随机拍脑门定义下列设计框架
【A类鱼:1~10生命值的鱼】【B类鱼:10~50生命值的鱼】【C类鱼:50-200生命值的鱼】
【D类鱼:200~1000生命值的鱼】
新手房间需要玩家保持一个良好的“盈利”体验,让玩家感觉鱼好打,所以在配置鱼的数值上;我采用的是【A高频】【B正常】【C低频】【D固定时间出现1个】
进阶房间的玩家已经对游戏有了一个基本的认识,这时候需要把玩家带入到一个小波动的状态下,我采用的是【A正常】【B高频】【C低频】【D固定时间出现1个】
高阶房间的玩家希望他能有较大的资产波动,这时候需要把玩家带入到一个大波动的状态下,我采用的是【A低频】【B正常】【C高频】【D固定时间出现1个】
顶级房间的玩家已经具有一定资产,这时候需要把玩家带入到类似于梭哈的状态下,我采用的是【A低频】【B低频】【C高频】【D出现频率较多】
注:实际在配置不同鱼出现的频率时,需要反复的亲自体验,去亲自观察打鱼时鱼的出现是否感觉良好。
根据上面所需要实现的玩家成长周期来看,房间的鱼是玩家主要的游戏内容,所以大部分玩法、功能、以及精力都需要放到鱼身上,这是玩家最直接、最有效能接触到的内容
搭配鱼的方案就比较通用了,大部分游戏如果是复刻的别人家的,一般不会在房间差异化以及鱼种上做过多的文章,但是如果想要经营一款长久的捕鱼,鱼是直接展示给玩家的第一要素,差异化、特色、新鲜感都需要从鱼身上来反馈给玩家,毕竟,玩家有新鲜的体验,即使输了,也会降低一些抱怨心理,谁家的捕鱼也不可能天天靠着放水玩家赢钱来留下玩家(这样还怎么挣钱呢?……)
后面我常会采用多模块来分散玩家“输”的感觉,主要的载体就是鱼,这样可以尽可能让玩家在游戏中后期不至于因为输而抱怨。(虽然不可能,还是有许多玩家骂的……)
---------------------------
Part4:
刷鱼的路径——》鱼儿怎么游动:
关于路径:有2D和3D不同的实现方案,有预设类型的,有随机类型的;我们产品采用的是2D预设类型,直接画出固定的路径,通过批量生成的方式以及随机组合,来形成鱼在游戏中游动的路径。
优点:策划在配置路径时,可以明确知道这鱼的游动方向
缺点:数量少时,鱼都是一套路径,很容易就让玩家发现规律,而且配置起来很低效、可变化性少,需要新的路径时需要重新画。
例如,上述就是我们才Demo期间,前端做了一个路径生成工具,再自行编辑所出现的路径,生成文件后保存;每一个路径对应一个ID,后续在鱼儿游动时配置上去即可。
总之:
路径的实现方案有很多种,传统路径上述方式基本可以满足,但是像“捕鱼来了”里面的3D螺旋式鱼阵、就比较复杂了,这一块需要开发同学衡量一下自己的算法了。
-------------------------------------------
Part5
特殊的玩法:鱼的玩法内容设计
上面了解到了我们需要什么样的鱼,如何填充到游戏的场景中去,那么就可以欢乐的找美术同学要对应的鱼儿需求了,去百度、参考竞品、海洋知识百科里面收集大量鱼儿和美术同学商量需要多少只鱼,什么样的鱼,赋予这些鱼不同的生命值,填充到场景中,即完成一个【基础捕鱼游戏】了
那么光有基础的内容,只是开始了游戏设计的第一步,需要增加不同的玩法让玩家在打鱼过程中体验到不同的乐趣,那么接下来就介绍一些传统游戏中和我所设计过的“有趣”的鱼
1.传统鱼类型
不过多解释了,无特殊玩法,最基础的组成元素,玩家捕获获得一定金币返利
2.特殊鱼类型
捕鱼中常见的,炸弹鱼、冰冻鱼、闪电鱼、黑洞鱼……在这里记为A类
还有一些,大三元、大四喜、一触即发、连连看之类、鱼王的鱼,本质上就是击中一条,其余的鱼也会被捕获……在这里记为B类
以及更为复杂的、各种平台推出的兑换卡、兑换券、掉特殊道具的鱼……这里不做解释,讲完上述后,大家会自己明白如何去设计一些满足自己需求的“特殊鱼”
注:很多平台的捕鱼,通过打鱼掉“兑换券”,兑换券可以直接在游戏中兑换微信红包、话费、以及实物等等,这些已经有一些擦边球了,更有其平台,掉落数量直接与玩家的倍率挂钩,说白了,就是一种上下分的包装。
用户充值游戏货币——游戏货币“对价”变成了代币——代币直接变现,这个已经相对比较赤裸了,在设计游戏时,尽可能的避免此类功能吧
A类鱼思路:
1.此类鱼的表现形式相似,都是捕获特定的鱼后产生一些连锁反应,导致周围的鱼连带死亡;如果了解了之前我所说的,每一个鱼都是有生命值的模型,这个问题就很好解决了。
实现起来有2种方式:二次算法以及固定收益实现
二次算法:就是当玩家捕获“炸弹鱼”后,假设这个炸弹鱼应该返奖100分,那么只需要后台把这100分换算成“子弹”再去匹配对应的鱼,二次校验其它的鱼是否死亡,即可实现炸弹鱼被捕获后导致其它鱼死亡的基本逻辑了
固定收益实现:同理,一个炸弹鱼返奖100分,那么直接去匹配周围的鱼,凑齐100分直接死亡也可以实现(如果没办法精确匹配,也有一些其它方式来完善返奖率,我并没有采用该方案,所以不说了)
举个例子:
玩家炮台倍率为10,子弹伤害为1,炸弹鱼生命值为100,返奖为100;则玩家捕获炸弹鱼理应获得10*100=1000分的收益。但是我把这1000分化作二次运算的子弹伤害,去匹配周围其它鱼,把这1000分换算成100点伤害再随机至其他鱼身上,那么整体上就是一个二次平衡算法,玩家的期望收益没有变,从而实现炸弹鱼的整个基本循环逻辑了
(注:实际二次运算伤害为100,1000分是货币理应返奖的具体数字,100可以理解赢得分数换算为伤害的结果)
那么本质上就形成了,玩家伤害为1的子弹,在击中炸弹鱼后,变成了一个伤害为100的子弹,再去匹配其他可以获得分的鱼。炸弹鱼本身只是一个媒介,通过包装让用户觉得有意思。
所有A类鱼本质上相似,我采用的是平衡期望转换成二次运算来实现这种机制。如果你理解了这个思路,那么所有类似的鱼,都可以通过该方式实现。
(还有更多细分算法,在二次运算中运用,来保障玩家的体验,这里不过多解释,理解原理后这样的鱼设计起来就不会很复杂了,而且整体上没有打破“平衡体系”原则,不会造成某一条鱼的返奖率过高或者过低)
以上,按照该思路,炸弹鱼、冰冻鱼、黑洞鱼、闪电鱼等等一系列的本身不产生价值,通过属性来进行二次运算可以完整的渡过鱼的展示效果需求算法。
当然了,有更简单的,鱼死亡——》随机抽取一定数量的鱼死亡,分数回报期望控制在特殊鱼的回报率当中,也可以完成上述需求!
后续会在专栏其他篇幅中,添加一些我曾做过的特殊鱼玩法采用的计算方式。
这里就不多再叙述特殊鱼的玩法了,继续下一个类容。
-------------------------------------------
Part6
进阶的玩法:弹头、技能卡、技能等
1.技能卡
多半在游戏中是一种常规道具提供给玩家使用,通常捕鱼的道具卡有【瞄准】【急速】【召唤】【冰冻】;上述技能卡没有特别的数值设计以及复杂的逻辑
2.弹头
我在这里采用的弹头,把它定义成了一个“高伤害的子弹”,许多游戏的弹头本身就是一个“金币袋子”的包装……具体原因不多说了,做过捕鱼的大家心里都明白弹头的本质作用是什么。
所以,我在弹头保留弹头依旧可以炸死鱼的基础上做了一些调整,弹头在使用时的数值算法调整为:弹头自身有一个【倍率属性】以及一个【伤害属性】,不同的弹头所含有的属性不同
例如:一个青铜弹头的基础倍率是10倍,伤害点数为100点,那么在使用时,等于是一个用户发射了100个伤害为1的子弹,分布在屏幕中的鱼身上,如果有鱼死亡,则按照鱼本身的返奖率进行返奖。
假设死亡3只10分的鱼,则弹头的最终收益=10*10=100点,玩家在使用弹头后,获得的回报为100
平衡期望原则:上述的青铜弹头,基础倍率10,伤害100,则他的对价价值=10*100=1000;即一个青铜弹头可以衡量为1000个金币,则在产出青铜弹头时,需要把该道具作为一个1000金币的投放,纳入到游戏中的投放中;同时若打鱼掉落该道具,则也需要把该部分纳入到鱼的回报率总和中去
3.技能
少部分捕鱼游戏会推出“技能”的玩法,常见的有【炮台激光】、【蓄能发射】、【鱼叉弹射】等等
这种类型的数值算法,我采用的与弹头算法类似,当使用某一技能时,均换算为“伤害点数”,通过玩家当前的炮台倍率或者默认的设定倍率来衡量该技能的“对价价值”
例如:炮台激光,在使用时,向前方发射一束激光并命中区域内的鱼,激光是按照玩家的炮台倍率随机浮动的,伤害值默认为100点,则它每使用一次,需要消耗的“对价”价值为【玩家倍率】*100
这种浮动对价怎么去平衡它的使用次数呢?腾讯的捕鱼中就采用了能量转化次数的方式
按照腾讯中的算法,玩家的炮台倍率为500时,需要消耗500*10=5000的能量值;我们假设激光可以造成的总伤害为100点
则激光的期望值为:500*100=50000金币的对价价值
那么每点能量的期望为:50000/5000=10金币的对价价值
由此,我们可以得出,玩家每获得1点能量值,即等于产出了10金币的投放
于是:所有上述的功能模块均有一套标准的对价算法,我们可以更换许多包装形式来实现类似的方法
------------------------
Part7
模块的拼装:黄金积分抽奖等周围的产出与回收
我们在许多捕鱼类型的游戏中会发现有许多小系统,里面可以获得许许多多的金币或者其他奖励,作为一个“博弈”游戏来说,产出金币的方式有两种。
一、玩家通过充值,系统产出金币,类似于印钞机,这些金币是无端凭空出来的
二、系统的投放,这些是游戏本身为了维持游戏中的运转而产生的货币
许多游戏通过大量赠送的方式,今个半价礼包,明天一折秒杀,后天清仓甩卖的方式拉动玩家消费,会大大缩短整个游戏的生命周期以及整个游戏的经济平衡;所以,在设计其他小系统模块中,我们需要对每一个系统的量产以及对价做一个数学模型估算,在游戏中进行对应的控制,才能让游戏整体上更加健康以及按照既定发展体系运营下去。
标定价格:以金币作为核心对价参照物,游戏中的道具均可以设定一个比例对价,来对该物品进行金币转换,这样在不同的新功能出现时,我们可以按照对价后的归一,来判定这个系统模块的具体价值
以黄金积分抽奖为例,常规的做法是需要玩家捕获一定数量的黄金鱼,每次捕获会获取一定的黄金积分,积攒到一定数量后可以进行抽奖。(如下图所示)
常见的抽奖模式会划分多个阶梯,主要目的是用于不同玩家积攒的积分不同,所抽取的奖励不同,高额积分所对应的奖品更加有吸引力。
如何对这一部分做数值平衡计算呢,我采用的是抽水方式平衡,主要有以下几个环节合并后形成新的平衡。
把整个流程划分为三个模块后,整体上通过几次运算后,回归新的平衡。
我们假设一只黄金鱼的生命值是100,价值是90,玩家炮台倍率为1
则玩家在捕获一只黄金鱼时,理论上回报率为90%,剩下10%被系统抽走了
这时候,我们通过给予玩家10点黄金积分储蓄到玩家的账户中,理论上玩家获得的回报率为100%
只不过这个100%变为了90%的游戏币直接返还,以及10%的其它形式返还
后续,我们再通过积分抽奖的形式,进行二次返还达到最终的返还目的。
上述我们可以把整个黄金鱼变为黄金积分和游戏币保持他的一个相对平衡数值的模型,抽奖这一块我们再通过对物品的价值锚定以及概率控制,达到最终的平衡期望
上述,我列出一个基本抽奖的设计思路,青铜档位的抽奖需要消耗100的黄金积分(假设我采用黄金积分=游戏币,比例为1:1的设计话)
抽奖中我一定投放四种奖品,100游戏币,50游戏币,500游戏币,500游戏币,它们的概率分别为25%,则按照期望值核算后,玩家进行一次青铜抽奖,回报率为287.5%;这个值明显高于平衡值,我们只需要调整物品的数量或者概率,控制奖励的回报率在100%左右,即可达到玩家从打黄金鱼到黄金抽奖这一整个过程的平衡
如此我们可以炮制许多类似的小功能模块到游戏中,通过不同的载体让玩家体验不同的玩法,但是最终在整个数学模型中,玩家始终保持在一个理论数学期望的平衡点上
由于这仅仅是数学的平衡期望,许多玩家没有把黄金积分或者其它转换的代币变为“游戏币”时,玩家会处于一种“亏损”的状态,所以我们通常需要一些额外福利,保持玩家整体上可以持续运转下去,这样玩家才能真正的保持在游戏中持续娱乐
通常的福利有:签到模块、任务模块、活动模块、救济金模块等等,我们把这些模块头都通过一定数值锚定后,我们就可以知道系统本身产出了多少游戏币,这样有助于我们在往后的数值调整过程中,有一个标准去进行把控
Part8
数据的监控:整体大盘,个体用户
在上一节当中,我通常会把每一个模块都拆分成独立的小子项,每一个小子项的设计标准参考都是独立平衡的,这样在多个系统串联起来后,不会因重叠因素导致数据分析往往找不到哪里出问题。
举个例子:
在添加黄金积分抽奖模块后,我们把黄金积分的产出同步到玩家打鱼的消耗和收获当中,即可得出实际房间中,整体大盘上所有玩家在这个房间的盈利情况
个体用户的汇总即可得出上述的数据监控情况,由于在设计时,每个模块是平衡原则出发,所以无论玩法是否有去参与“黄金积分”这个玩法,我们不用担心有些玩家没参加这个玩法会不会导致回报率偏低或者偏高
(同样的,如果我们不按照平衡原则,按照黄金积分抽奖200%的回报率去设计,那么通过黄金积分的产出,反向计算玩家的子弹消耗,在刨除掉黄金积分的影响后,玩家正常打鱼是一个怎么样的回报率)
Part9
商业化方式:大R消费,小R娱乐
休闲娱乐的捕鱼,我们如何提高捕鱼用户的付费呢,由于本身捕鱼游戏中,玩家的核心财产是游戏币,所以主要收入来自于“充值游戏币”,但是这种粗暴的方式在玩家连续破产充值后会影响玩家的付费心情,所以在玩家付费次数以及付费金额在短期达到一定数量时,我们通常需要“保护一下”玩家,使他一定期限内,不用去担心货币的烦恼。
许多游戏在体验的时候,大家会有一个感觉,是不是充钱后觉得鱼好打了?可能这款游戏中就采用了这样的方法(当然了,由于本质上还是概率游戏,在你人品极差的情况下/充钱保护的力度不够时,依旧会导致充钱了还是很容易就输光了再充)
作为设计方,我这同样需要考虑这个问题,玩家怎样才算充钱多?充钱过后如何去保护呢?
我这举一个简单的例子,也是基于数学模型去锚定一个价值。
当一个用户充值10元,获得系统赠予的10万游戏币后,我们同样给予玩家一个10万的隐形货币
玩家A拥有资产10万,隐形资产10万,炮台倍率1
玩家在打鱼时,每发射一颗子弹,消耗1游戏币,但是同样我也