游戏概率计算方法:循环模拟

机构:郑州鬼谷门教育 时间:2016-07-26 点击:1105

  但也因此这个方法往往被人诟病——技术含量低、结果不精确、计算效率低。

  这个方法的原理很简单,以上述蛋刀套装的计算为例,使用2层循环,内循环使用一个Do while循环语句,在循环主体中使用一个变量对Boss击杀次数累加,并使用一个随机数模拟Boss的掉落结果。

  在上述例题中,当蛋刀主/副手的掉落都为真时,则退出内循环,在外循环的For ..to..语句中,进行指定套数的蛋刀套装收集的模拟,用内循环的计数总和/指定的套装套数,得到平均一套蛋刀需要击杀的Boss次数。

  基本逻辑伪代码主体部分如下:

  pa=0.1

  pb=0.5

  raids=0

  For set=1 to 1000000

  seta=False

  setb=False

  Do while seta!=True and set!=True

  ‘循环体

  ‘模拟一次掉落

  ‘生成一个随机数

  rd=Randbetween(1,100)

  ‘根据这个随机数,判断a/b本次的掉落情况

  seta=Or(seta,rd>pa*100)

  setb=Or(setb,rd>pa*100&&rd<(pa*100+pb*100))

  raids=raids+1

  …

  loop

  …

  raids/1000000

  …

  vba很好学,24小时真的可以通关(满足工作需求绝无问题),多练习就可以。郑州游戏设计培训学校整理。

  上述的方法无法使得每个人都满意,比如,当条件改变时——收集3把蛋刀主手和4个蛋刀副手,就需要修改循环主体,所以可以考虑将需要凑齐的部件作为函数的参数传入。

  function raids(pa,pb,seta,setb)

  …

  end function

  前面有说过,这个方法无法得到精确结果,但当模拟次数足够多时(如上文百万次),结果和精确结果非常近似。排除代码因素造成的人为Bug,这个方法非常可靠。所以有相当一部分数值策划直接用这个方法计算;或是用这个方法对概率公式的计算结果进行一次验算。

  假如我们坚持要求出精确的期望次数,并且仍然希望解答方法足够简单,我们可以尝试函数递归。

返回顶部