唉!现在终于发现上学时不好好念书有多少的坏处了,概率几率对于我来说一直是一个很难弄清楚的问题。今天,我又继续让这个问题纠结上了。好吧!来说说我的那点事儿,首先注明一下:这是一篇求助性文字,我的几率算法也许根本就是不对的。如果恰巧有数学系专家学者路过,那希望您能留言说两句。问题是这样子的:在一个物品合成系统中,需要使用几件不同的物品来合成宝石,有不同的几率生成一颗(50%)、两颗(16%)和三颗(2%)宝石,其余的为爆掉,即什么也得不到。
我的PHP代码实现是这样子的:
<?php //初始化数组 $stone_arr = array( array( 'num' => 1, 'prob' => '50%' ), array( 'num' => 2, 'prob' => '16%' ), array( 'num' => 3, 'prob' => '2%' ) ); //随机获得一个幸运数字 $luck_num = mt_rand( 0, 99 ); //初始化几率区间和最终宝石生产数目 $lucky_range = $made_num = 0; foreach( $stone_arr as $sa ){ $prob = intval( $sa['prob'] ); if( $luck_num >= $lucky_range && $luck_num < $lucky_range + $prob ){ $made_num = $sa['num']; break; } else{ $lucky_range += $prob; } } for( $i = 0; $i < $made_num; $i++ ){ //生产宝石的逻辑 } ?>
左思右想,我总觉得这个并没有问题,可我的同事坚持认为$luck_num = mt_rand( 0, 99 )这一行应该放到循环体的里面,说的也有道理呀!不过我觉得这样是不是多给了玩家机会?(当然,从玩家的角度来说,机会越多越好。呵呵~),截至记者发稿时止,我还是没有弄清楚是不是该把随机数放到循环里面?或者这两种方法都不对?麻烦路过的明眼人给俺说道说道,不甚感激