把抽奖概率 三种算法抗大怎么做

GameDes(1)
作者:Einsphoton (任江枫)
个人博客:
个人微博:
关注以获得更多内容
版权所有,转载须注明出处以及作者
欢迎加入新浪微群 游戏设计群&
  这一章节主要利用上文中引入的转盘算法来讲解说明多攻击模式战斗的应用以及圆桌理论。文章中为了进一步具象讲解,所以引入VBA实例,顺带一下VBA战斗模拟器教程。但是使用VBA战斗模拟器来设计游戏显然与“高效设计游戏”相悖,有那时间做一个无用的玩具,还不如多花点时间在该去思量的地方。请给位游戏设计者酌量。
  由于之前很多大婶们喷小的话有点罗嗦,两三句话的事情写了整篇文章,所以此回没敢放得开,好多东西尽量缩短,请大婶们见谅哈。还有一些大婶文章都不看上来就喷的,小的有句话:“请看完文章有依据之后再喷,要不然喷出来的料太骚气。如果想显得各位大婶能耐,找错对象了,小的只是一心想改善业内气氛的一介草民。”
  最后,请各位抱着正常的心态阅读此文章。改善我们业内气氛,人人有责,请不要让业内继续乌烟瘴气。
抽奖模型在战斗系统中的应用
  抽奖模型在战斗系统中的应有有两种类型,第一种是回合制自动战斗类型,如类《Q将三国》游戏;另一种是多攻击形式的类型,这一类型没有限制是否是回合制,比如类《魔兽世界》游戏。下面我们将分情况讨论。
自动战斗系统模型中的转盘
  随着现在网页游戏以及手机游戏的盛行,更多的战斗系统被设定成自动战斗模式,因为这类游戏正需要简化其战斗玩法,从而达到休闲娱乐的目的。自动战斗的系统需要的是多攻击模式的触发逻辑,以《Q将三国》为例,如果按照传统的设计思路会是以下情形:
&&&&P1攻击P2
  发生在P1身上的模式有三种:A.P1的普通攻击&&B.P1的暴击&&C.P1的技能攻击,从中抽取一行为进行攻击。
紧接着再判断发生在P2身上的承受模式:a.P2的闪避&&b.P2的格挡&&c.P2的反击&&d.P2的反制,从中抽取一行为,进行回应。
  这样无疑会为我们的设计工作带来困难,一是每次战斗需要进行超过2层的逻辑判断,二是很难将“闪避”“格挡”“反击”“反制”这么多元素进行控制,从而抽奖。三是不能应变“技能攻击不可闪避”等这样的需求,如果强行制作,还需要再加一层逻辑。
  所以我们不妨看看另一种方案:
&&&&P1攻击P2
  我们只对这几个元素进行抽奖:A.P1的普通攻击&&B.P1的暴击&&C.P1的技能攻击&&D.P2的闪避&&E.P2的格挡&&F.P2的反击&&G.P2的反制。
  将这次的抽奖结果作为本次攻击的“模式”,无论抽中的是对P1有益的攻击形式还是对P2有益的攻击形式。
  如此一来,我们就迎合了之前所提出的需求“技能攻击不可闪避”,并且这一方案具有以下特点:
  ①个项目之间是相互影响的,如果一方概率的增加会降低其他项目的概率。这特点比较适合战斗系统的要求,例如对方的闪避以及格挡的提升必然会带来我方攻击无效率的增加,但并不会让你永远攻击无效化。
  ②如果将敌我的所有攻击模式进行带有优先级的排列,然后再将抽奖空间强制设定一个常量,则这种系统就会转变为“圆桌算法”。(后文进行讲解)
VBA中的示例应用
  下面我们就之前所讲的概念,在Excel中用VBA进行实例化,来实现我们所需要的功能。一个《Q将三国》类模拟器。
  但在哪之前,我们需要先开启Excel的一些功能:
  ①Excel选项→常用→在功能区显示“开发工具”选项卡
  ②Excel选项→信任中心→信任中心设置→宏设置→启用所有宏 & 信任对VBA工程对象模型的访问
&&&&这样我们就可以进行VBA工程的编写了。
&&&&首先在表单中设计这样一个界面:
  图中各一级属性和二级属性都是我们要在接下来的程序中直接取用的,这样的设计师为了方便用户进行交互,一个简洁直观的交互方式。至于一级属性和二级属性的转化关系,由各位设计者自己设计。
  接下来我们需要构建一些方法,就以P1攻击P2为例:
&&&&首先我们先对这几种攻击模式进行抽奖,抽奖的内容有P1的普通攻击、P1的暴击、P1的技能攻击、P2的闪避、P2的格挡、P2的反击、P2的反制。
Private Sub P1HitP2()&&&&&&&&&&&&&'★★★★★★★★★P1攻击P2的方法
'=======================转盘算法抽奖=======================
&&&&Select Case Rnd * (blkTwo + dgeTwo + ctrTwo + ctaTwo + crtOne + 0.5)
&&&&&&&&Case 0 To blkTwo
&&&&&&&&&&&&atkMode = &Block&
&&&&&&&&Case blkTwo To blkTwo + dgeTwo
&&&&&&&&&&&&atkMode = &Dodge&
&&&&&&&&Case blkTwo + dgeTwo To blkTwo + dgeTwo + ctrTwo
&&&&&&&&&&&&atkMode = &Counter&
&&&&&&&&Case blkTwo + dgeTwo + ctrTwo To blkTwo + dgeTwo + ctrTwo + ctaTwo
&&&&&&&&&&&&atkMode = &Counter Attack&
&&&&&&&&Case blkTwo + dgeTwo + ctrTwo + ctaTwo To blkTwo + dgeTwo + ctrTwo + ctaTwo + crtOne
&&&&&&&&&&&&atkMode = &Critical Attack&
&&&&&&&&Case blkTwo + dgeTwo + ctrTwo + ctaTwo + crtOne To blkTwo + dgeTwo + ctrTwo + ctaTwo + crtOne + 0.5
&&&&&&&&&&&&atkMode = &Normal Attack&
&&&&End Select
'=======================转盘算法抽奖=======================
&&&&其中blkTwo为P2的格挡、dgeTwo为P2的闪避、ctrTwo为P2的反制、ctaTwo为P2的反击、crtOne为P1的暴击、其中强制设定P1的普通攻击为常量0.5。(为了方便起见,P1的技能攻击暂不考虑进去,但方法雷同)
&&&&接下来我们就需要根据上一步的抽奖结果atkMode,执行相应的操作了。
'================针对相应的攻击模式进行计算================
&&&&Select Case atkMode
&&&&&&&&Case &Block&
&&&&&&&&&&&&dmgResult = Int((atkOne - defTwo) * (0.8 + 0.4 * Rnd) * 0.5)&&'■公式修改处■
&&&&&&&&&&&&If dmgResult & 1 Then dmgResult = 1
&&&&&&&&&&&&beHitedDmg = 0
&&&&&&&&&&&&battleReport = &P1发动攻击,【格挡】P2受到& & dmgResult & &点伤害!& & Chr(10)
&&&&&&&&Case &Dodge&
&&&&&&&&&&&&dmgResult = 0
&&&&&&&&&&&&beHitedDmg = 0
&&&&&&&&&&&&battleReport = &P1发动攻击,【闪避】P2受到0点伤害!& & Chr(10)
&&&&&&&&Case &Counter&
&&&&&&&&&&&&dmgResult = 0
&&&&&&&&&&&&beHitedDmg = Int((atkTwo - defOne) * (0.8 + 0.4 * Rnd))&&&&&&&'■公式修改处■
&&&&&&&&&&&&If beHitedDmg & 1 Then beHitedDmg = 1
&&&&&&&&&&&&battleReport = &P1发动攻击,【反制】P1的攻击被反制,P1受到& & beHitedDmg & &点伤害!& & Chr(10)
&&&&&&&&Case &Counter Attack&
&&&&&&&&&&&&dmgResult = Int((atkOne - defTwo) * (0.8 + 0.4 * Rnd))&&&&&&&&'■公式修改处■
&&&&&&&&&&&&If dmgResult & 1 Then dmgResult = 1
&&&&&&&&&&&&beHitedDmg = Int((atkTwo - defOne) * (0.8 + 0.4 * Rnd))&&&&&&&'■公式修改处■
&&&&&&&&&&&&If beHitedDmg & 1 Then beHitedDmg = 1
&&&&&&&&&&&&battleReport = &P1发动攻击,【反击】P2受到& & dmgResult & &点攻击,P1被反击受到& & beHitedDmg & &点伤害!& & Chr(10)
&&&&&&&&Case &Critical Attack&
&&&&&&&&&&&&dmgResult = Int((atkOne - defTwo) * (0.8 + 0.4 * Rnd) * 1.6)&&'■公式修改处■
&&&&&&&&&&&&If dmgResult & 1 Then dmgResult = 1
&&&&&&&&&&&&beHitedDmg = 0
&&&&&&&&&&&&battleReport = &P1发动攻击,【暴击】P2受到& & dmgResult & &点伤害!& & Chr(10)
&&&&&&&&Case &Normal Attack&
&&&&&&&&&&&&dmgResult = Int((atkOne - defTwo) * (0.8 + 0.4 * Rnd))&&&'■公式修改处■
&&&&&&&&&&&&beHitedDmg = 0
&&&&&&&&&&&&battleReport = &P1发动攻击,【攻击】P2受到& & dmgResult & &点伤害!& & Chr(10)
&&&&&&&&End Select
'===================针对相应的攻击模式进行计算=================
&&&&&&&&&&&&&&
&&&&主要的方法已经写好了,剩下的只需要在各个攻击行为中调用该方法,然后取用相应的dmgResult、beHitedDmg以及battleReport就可以了。
&&&&详情请看本文末尾所带的附件。
圆桌算法的应用
&&&&上会大概已经介绍过了,圆桌算法有两个必要条件:①对抽奖内容进行优先级排列;②强制限定抽奖空间。
  对于圆桌算法,还有一个比较形象的解释:“在一个面积固定的圆桌上摆放东西,如果圆桌上摆放的物品已经满了,那么其他优先级低的物品将无法继续摆放到圆桌上,而优先级高的物品将会把圆桌上优先级低得物品挤出圆桌。”
  这种设定会使得游戏拥有相当丰富的可玩性,只要你肯花心思去设计。例如在《魔兽世界》中Boss的碾压攻击具有超强的伤害力,但是我们又会有一种Tank职业来做肉盾免于这种碾压攻击,正是因为这种职业的免伤被动技能会将碾压攻击挤出圆桌。
  我们还是回到实例上。
  上面的系统我们稍作修改。首先我们先把设定一个优先级,从高到低有:“闪避”、“格挡”、“暴击”、“反制”、“普通攻击”。原则是要把对“被攻击方”有益技能的优先级设定为高,但也可以结合自己想要的特点来设定。接下来就是要限定抽奖空间,暂定为1。这样一个圆桌抽奖已经完成了。
  借用我们之前编写过的代码我们进行稍作修改:
'=======================转盘算法抽奖=======================
&&&&Select Case Rnd&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&‘注意变化,限定抽奖空间为1
&&&&&&&&Case 0 To dgeTwo&&&&&&&&&&&&&&&&&&&&&&&&&&&&‘注意优先级,闪避
&&&&&&&&&&&&atkMode = &Dodge&
&&&&&&&&Case dgeTwo To dgeTwo + blkTwo&&&&&&&&&&&&&&&&‘注意优先级,格挡
&&&&&&&&&&&&atkMode = &Block&
&&&&&&&&Case dgeTwo + blkTwo To dgeTwo + blkTwo + ctaTwo&&&‘注意优先级,反击
&&&&&&&&&&&&atkMode = &Counter Attack&
&&&&&&&&Case dgeTwo + blkTwo + ctaTwo To dgeTwo + blkTwo + ctaTwo + crtOne&&&‘暴击
&&&&&&&&&&&&atkMode = &Critical Attack&
&&&&&&&&Case dgeTwo + blkTwo + ctaTwo + crtOne To dgeTwo + blkTwo + ctaTwo + crtOne + ctrTwo&&&&‘注意优先级,反制
&&&&&&&&&&&&atkMode = &Counter&
&&&&&&&&Case Else&&&&&&&&&&&&&&&&&&&&&&&&&&‘注意优先级,普通攻击
&&&&&&&&&&&&atkMode = &Normal Attack&
&&&&End Select
'=======================转盘算法抽奖=======================
&&&&之后的内容相似。
&&&&我们来看一下如此设计的效果。看以下例子:
&&&&所有项目的概率和为0.6,那么还有0.4作为普通攻击的触发概率。但是这期间如果其他项目的触发概率的增加会减少普通攻击的触发概率,直至把普通攻击完全挤出去,甚至会把优先级次低的“反制”慢慢的挤出去。如:
&&&&由于其他优先级高的四项的概率加和已经等于0.95,所以次级的反制只有0.05的可用生效范围。以此类推,直至最高级的“闪避”会把所有攻击模式全部挤出圆桌,以至于每次攻击只能被闪避。
&&&&至此,本章结束。
&&&&游戏中还有好多抽奖模型的存在,我们游戏设计者需要透过现象看本质,找出其内在联系,万变不离其中,形成一套自己的设计思路,这才是作者写文章的目的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:10251次
排名:千里之外
(1)(2)(3)(4)(6)抽奖概率略坑_守望先锋吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:2,200,660贴子:
抽奖概率略坑
基本一百一个橙吧,升级送的7个倒开出了两个橙色
30还是40个包= =忘了...
首先声明:本帖并不与任...
攒了很久的两万积分,就...
今天起来,新区爆满,怒...
楼主一狠心来出了攒的30...
格式 费用 成品:只说永...
3D双端东方魔幻网游「大青云」勾魂公测,穿越逆转,封神故事,全新演绎!
50个7橙路过
我有3个兄弟!一个叫东眼,一个叫西耳,一个叫南嘴.请问我叫什么?
土豪76被人栽赃陷害导致被全球通缉,76作为前守望先锋成员,在守望先锋倒台后转入地下,这些年间他一直在探寻守望先锋垮台的真正原因,现在他来到位于墨西哥的多拉多试图找到一个答案,一个夜晚,他遇到了一群死人帮的成员,他决定教训一下他们,他可是曾经的哈德森,算是有两把刷子,这对他来说很容易,就在他准备去追逃跑的流氓时,一个小女孩闯入了他的视线,不料想,狡猾的流氓朝小女孩扔了一个手雷,他怔住了,他想去追那些狡猾的流氓,他想去救惊慌失措的小女孩,但是他必须快速做出选择,因为下一秒小女孩的生命就终结了,他的大脑在飞速的运转,曾经的一幕幕展现在脑海中,他回想起他牵过的小男孩,他看到小男孩眼中对他的那种敬仰与信任,于是他做出抉择——拯救处于极度危险的小女孩,因为流氓可以以后再找,但是拯救小女孩只有现在!他纵身一跃将小女孩紧紧抱在怀中,Boom!手雷爆炸,他受伤了,但是小女孩得救了,他心里自嘲道“我已不再年轻了”,是的,他已经49岁了,相比年轻那会体能已经大大的下降,他吃力的爬起来,虽然他以前也多次负伤,最重的一次是一次行动中智械的激光刀击中他的右脸,险些要了他的命,但是他心里明白他已不再是曾经的哈德森了,他强忍着疼痛,支起身子准备离去,这时身后传来小女孩的声音“你…你为什么要救我?”他犹豫了一下答道“旧习难改吧”,他想起还有一样东西没有归还,于是随手将钱包扔给了小女孩,他又想到流氓们可能会故地重游,又叮嘱了一句“孩子,快回家吧,这里不安全”,他吃力的弯下腰去捡他的脉冲步枪,正当他以为一切都结束的时候,他又听到了那熟悉的声音“你,就是他们所说的英雄吧…”他停下了脚步,一时百感交集,心里异常复杂,他努力的抑制自己内心的情绪,挤出几个字“不再是了,但你买了328我就是了”
贴吧热议榜
使用签名档&&
保存至快速回贴内部爆料!抽奖概率图!_英雄联盟吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:8,941,285贴子:
内部爆料!抽奖概率图!
图片来自:深圳腾讯大厦5楼办公室的内部资料!!
两个月前1000图谱,然而...
刚出的一发
大家抽奖都抽到过哪些...
用程序模拟抽卡,抽到UR...
听人说一周藏宝图能挖2...
网页游戏「屠龙传奇」官网传奇英雄,决战沙巴城!重温网页游戏热血轻狂,还原传奇经典!网页游戏致敬老传奇,正版授权,原味复刻!即刻领取网页游戏血战礼包!待你荣耀归来!
附本人例子
前排冲冲冲
前排冲冲冲
前排冲冲冲
火了怎么办~
笑死了- -抽了600块钱的抽到了俩龙年限定。--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------“下面要拍卖的是一位道友在上古遗存下来的仙殿中寻到的一盒炫迈……”,大厅中顿时一片嘈杂拍卖行的老者摆了摆手示意让大家静一静道“炫迈的神奇功效想必诸位都知道吧,如果棋逢敌手,就要看谁更持久,这时候吃上一小片炫迈,估计敌手会立马绝望的打滚认输,这等神物也不是一般晶石能衡量的 谁若有同等价格的宝物也能用来交换”“现在拍卖开始!底价一万极品仙晶”“我出三万极品仙晶!”“我出十万极品仙晶!”“我出一罐正宗加多宝!”……………………众人一阵沉默,加多宝,那可是价值百万极品仙晶啊!“我出一包辣条!”正当众人无力叹息时,拍卖厅二楼传来霸道的一道声音!什么!!!众人闻言皆露出不可思议的神色,辣条是什么?那可是天地未开 混沌中孕育而成的绝世神物,一些传承万载的无上道统也未必能拿出一条,更徨论是一包,所有人都望向声音所发之处 只见那里端坐着一个男子 二十出头的样子,令人震惊的是他所穿的道袍上的标志。“竟然是神秘而又强大的学院!而且还是当中最可怕的系!”学院 , 人们听到这名字第一时间联想到就是强大! 据传当年一个大教惹了一个蓝翔系的学生,然后被那人祭出挖掘机一路碾压而过,山门破碎,护山大阵如同水豆腐般不堪一击,整教所有人皆被镇杀!要知道当中还有渡劫期的人物!蓝翔挖掘机有多可怕可想而知!难怪此子能够拿出一包辣条,竟是出自学院!两包” 只听三楼另一个包间传来一声淡淡轻呼 “什么?竟然有人敢和叫板,而且还能拿出两包辣条!这是何等人物”大家议论纷纷 只见一个20出头的年轻人,身上的白衣无风自动,胸口一个耀眼的徽章——!   一个是力量为尊的蓝翔,一个是财大气粗的新东方,为了争夺一盒炫迈,众人感觉一股新的风暴就要出现了……  
贴吧热议榜
使用签名档&&
保存至快速回贴}

我要回帖

更多关于 js抽奖概率算法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信