Flash As3随机选择Disks plus Chance / luck

时间:2013-05-28 08:53:59

标签: actionscript-3 flash random

我的问题是如何在Actionscript3.0中为随机选择的磁盘添加机会。 因此,如果玩家按下磁盘按钮,他/她有30%的机会滚动disk7和40%的磁盘6。我怎么能拉这个低谷。

disks.addEventListener(MouseEvent.MOUSE_DOWN, hitDisk);

function hitDisk(event:MouseEvent):void{
    disks.gotoAndStop(Math.ceil(Math.random()*7));
}

磁盘[movieclip]>有7个关键帧,里面有磁盘。 最后一帧是特殊磁盘。每个磁盘都有一个实例名称。 磁盘[movieclip]> (frame1)diskOne,(frame2)diskTwo,(frame3)diskThree .....等等。

(磁盘就像骰子但圆形)

一些帮助会很好!!!感谢!!!

2 个答案:

答案 0 :(得分:0)

我想你想要这样的东西:

function hitDisk(event:MouseEvent):void{
var rand:int = Math.random() * 100; //gives you a number between 0 and 100
if (rand <= 40) //40% chance
    disks.gotoAndStop(7);
} else if (rand > 40 && rand <= 70) { //30% chance
    disk.gotoAndStop(6);
} else { //30 % chance
    disk.gotoAndStop(5);
}

答案 1 :(得分:0)

如果您搜索“带有偏差的随机数生成器”或“向随机数生成器添加偏差”(沿着这些行),您应该找到想要的方法:在随机数中包含某些数字'滚动'算法比其他算法产生更多的数字。

我将在这里假设光盘就像一个光盘,但有七种可能的结果。

这是我过去用于解决类似问题的一种基本方法。

你提到了:

  • 30%的机会滚动7
  • 有机会掷出6%

我将假设1,2,3,4,5在失去的30%几率中有相同的机会,因此30%除以5是所有其他数字的6%几率。所以:

  • 30%的机会滚动7
  • 有机会掷出6%
  • 6%的机会滚动5
  • 6%的机会滚动4
  • 6%的机会滚3
  • 6%的机会滚动2
  • 6%的机会滚1

因此,给定这些百分比(总计100%),您可以创建一个包含100个空格的数组,并且:

  • 用'1'
  • 填充前6个索引
  • 用'2'
  • 填写接下来的6个索引
  • 用'3'
  • 填写接下来的6个索引
  • 用'4'
  • 填写接下来的6个索引
  • 用'5'
  • 填充接下来的6个索引
  • 用'6'
  • 填写接下来的40个索引
  • 使用'7'
  • 填充下30个索引

然后使用Math.random()从该数组中随机选择一个索引。因为'6'中有40个机会被选中,所以'6'将在40%的时间内出现。等等其他数字。

为此设置一个大型数组可能相当浪费,但你可以通过一些数学来改善这一点(我可以看到数组实际上只有一半的大小并且仍然包含所需的百分比,只需要分开一切都由2)。或者你可以利用这样的事实:数字1,2,3,4,5具有相同的结果并将其分开,从而产生更小的数组(仅用于计算偏差结果),等等。