cocos2dx之抽奖界面与获奖概率的设计(二),cocos2dx抽奖

  次阅读 作者:智能小宝 来源:互联网 2015-09-28 13:37 我要评论(0)

cocos2dx之抽奖界面与获奖概率的设计(二),cocos2dx抽奖

****************************************************************************

时间:2015-02-02

作者:Sharing_Li

转载注明出处:http://blog.csdn.net/sharing_li/article/details/43405569

****************************************************************************

上一篇博客,我们讲解了抽奖界面的设计,其中着重讲解了下沿椭圆运动的动作类EllipseBy。本篇将讲解抽奖概率的设计。

转盘抽奖的方式有两种:第一种是先转转盘,转到谁就是谁。第二种是我先计算你抽中了什么奖品,然后再转到相应的奖品上(我擦,这不是暗箱操作吗!!)。

我们先看看第一种抽奖方式:

这个转盘有三个奖品,因为三个扇形面积一样,所以中奖概率一样,都是1/3。如果我们想改变每种奖品的抽奖概率,可以通过改变扇形的面积,比如概率是1/4,那么扇形的面积是整个圆的1/4。如下图:

如果我们想动态的改变抽奖的概率怎么办,一种方法是可以更换转盘的底图,但是显然这样做不好。我们想想,现实生活中,奸商是怎么暗箱操作的,比如拿个吸铁石,放到转盘后面来影响转盘指针的停留位置。这种方法我们可以借鉴一下(我不是奸商~),比如,我们给转盘上每一个扇形设置一个阻碍因子,获奖概率越大,阻碍因子越大。所以,当转盘转动的时候,指针每进入一个扇形区域,就将转盘的速度减去这个扇形的阻碍因子。这样我们就可以动态的改变抽奖的概率,不过这种“暗箱操作”精度不高,不好控制。后面讲第二种抽奖方式的时候,再来详细的讨论。先来看看怎么判断抽中了谁?

有两种方法:

第一种是判断旋转指针的针头停留的位置在哪个扇形区域内,也就是点与不规则形状之间是否碰撞,可以参考这篇文章:http://www.2cto.com/kf/201401/272331.html

第二种是根据每个扇形的角度来判断,整个圆的角度是360,假如一共有三个扇形,每个扇形的角度区间为[0,100]、[100,280]、[280,360]。我们可以通过getRotation来获得转盘转了多少度,然后进行取模运算,%360,再看看得到的结果在三个扇形哪个区间内就可以了。

以上说的方法虽然比较贴合实际生活,但并不是特别适合放到游戏开发当中,我们更希望更精确的控制抽奖概率,或者根据玩家的抽奖次数来动态的改变抽奖概率。那么接下来就说第二种抽奖方式了,即先计算后中奖。这种方法所有扇形的面积都相等。

作为一名游戏开发者,我们是希望让抽奖一切随缘,还是一切尽在自己的掌握当中?假如奖品中有极品装备,特别是数量非常稀少,如果玩家运气好,一下就抽中了怎么办?在游戏当中,一般抽奖,每天第一次都是免费的,之后的抽奖需要消耗虚拟币,只要涉及到虚拟币消耗的地方,我们就需要细心地设计,毕竟关系到咱们游戏开发者的收入。这里简单介绍两种方法。

第一种,假如有4个奖品A、B、C、D,我们指定每种奖品的抽奖次数N,N的意思是至少抽了N次,你才能抽中该奖品,然后再定义一个M,用来统计玩家抽了多少次。例如这4个奖品的N值分别是Na:1、Nb:2、Nc:10、Nd:50,M初始值为1,那么第一次抽,M++,M > Na,必定抽中A,第二次抽,M++,M > Nb,必中B;继续抽奖,M++,Nb < M = 4 < Nc,在小于M值的奖品中,即Na和Nb中随机选择一个。直到M = 11 > Nc,抽中C,然后继续抽,在Na、Nb和Nc中随机选择一个,然后依次类推。另外,如果有的奖品的N值相同,那么就在这些奖品中随机选一个。当M的值大于所有奖品的N值时,一些稀有的、值钱的奖品就会变得更加容易抽中。那么我们可以这样做,比如把这里的奖品D当作稀有奖品,当第一次抽中之后,我们改变奖品D对应的N值,N

= N + N / 2,当然,你要是黑心一点就这样设置N = N * 3,(估计玩家要群殴你了。。。)。确定抽中的奖品之后,然后计算出需要旋转多少度,指针才停留在该奖品的扇形区域上,最后调用RotateBy就可以了。

上面这种方法比较精确,并且非常灵活。我们再来看看第二种方法。

假如有A、B、C、D、E一共5个奖品,每种奖品的中奖率分别是:Ra:80%、Rb:30%、Rc:50%、Rd:30%、Re:10%,我们定义一个int型的基数,值可以随意取,但要合适。这里我们设置为100,然后就可以得到每个奖品的中奖区间为:A:[0,80]、B:[80,110]、C:[110,160]、D:[160,190]、E:[190,200],然后我们在区间[0,200]之间随机取一个数,看看这个数在哪个区间,那么对应的奖品就被抽中。然后我们再来看看怎么通过玩家的抽奖次数改变概率的大校我们定义一个系数p,值可以随意取,我们这里取2,然后我们得到区间的可变值V

= 抽奖次数M * p,那么原来的抽奖概率变为:A:[0,80 + V]、B:[80,110 + V]、C:[110,160 + V]、D:[160,190 + V]、E:[190 + V,200],这样做会有重叠区域,比如V = 10时,如果我获得的随机数等于85,A、B都在范围,这时候随机取一个值就可以了。同样,确定了抽中的奖品之后,再计算需要转的角度,然后调用RotateBy。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...