疯狂元宝的代码分析 揭露恶心的腾讯

来源:互联网 发布:linux snmpwalk oid 编辑:程序博客网 时间:2024/03/29 05:53
疯狂元宝的代码分析
腾讯推出了一个老虎机的游戏,名字叫疯狂元宝,女友比较喜欢玩,所以拼命挣银币来给她玩,可是玩了好久直到每天限制的100次最大只中了一个5倍,把她郁闷坏了,我觉的按概率不应该这样,就把他的flash反编译了,真是不看不知道,一看下一跳,腾讯真恶心。只能用恶心形容了。
 
这个picstop函数应该是老虎机停止的函数。
下面来对他的这个函数进行一下分析,使用了swith,即停止的情况一共有-4~~8这13种情况。
他构建了三个初始化数组
                ran1 = [2, 4, 6, 8, 10, 12];
                ran2 = [2, 4, 6, 8, 10, 12];
                ran3 = [2, 4, 6, 8, 10, 12];
这里面2是代表诺基亚
-4~~0这五种情况的可选数组里都没有2,并且都是用while语句使其不能产生三个相同的,即这五种情况任何奖都不可能中。
1为全2
2为全4
3为全6
4为全8
5为全10
6为全12
7 可供选择的数组里没2,他产生一个随机数0-3,
这个随机数如果为0则1,2洞为2,为1则1,3洞为2,否则的话2,3洞为2,总之就是这种情况为中2个2即中5倍。
       8 可选数组中有2,但他使用了1个嵌套while循环,使结果只产生一个2
       而他的这个prize值是通过服务端的某一算法生成的,即生成之后再传递到客户端来,你每次中没中,中什么开奖之前服务端就已经知道了。
可见中奖的结果是腾讯来控制的,如果他发发慈心后台算法上prize可能返回1,那估计我们还有希望中大奖,否则只有累死你的小手和大脑了。
他的这个while语句真够恶心的。
while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
 
   function picstop() {
        switch (_root.prize) {
            case -4 :
                var ran1;
                var ran2;
                var ran3;
                var _local1;
                var _local3;
                var _local2;
                ran1 = [4, 6, 8, 10, 12];
                ran2 = [4, 6, 8, 10, 12];
                ran3 = [4, 6, 8, 10, 12];
                _local1 = ran1[random (5)];
                _local3 = ran2[random (5)];
                _local2 = ran3[random (5)];
                while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case -3 :
                var ran1;
                var ran2;
                var ran3;
                ran1 = [4, 6, 8, 10, 12];
                ran2 = [4, 6, 8, 10, 12];
                ran3 = [4, 6, 8, 10, 12];
                var _local1 = ran1[random (5)];
                var _local3 = ran2[random (5)];
                var _local2 = ran3[random (5)];
                while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case -2 :
                var ran1;
                var ran2;
                var ran3;
                ran1 = [4, 6, 8, 10, 12];
                ran2 = [4, 6, 8, 10, 12];
                ran3 = [4, 6, 8, 10, 12];
                var _local1 = ran1[random (5)];
                var _local3 = ran2[random (5)];
                var _local2 = ran3[random (5)];
                while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case -1 :
                var ran1;
                var ran2;
                var ran3;
                ran1 = [4, 6, 8, 10, 12];
                ran2 = [4, 6, 8, 10, 12];
                ran3 = [4, 6, 8, 10, 12];
                var _local1 = ran1[random (5)];
                var _local3 = ran2[random (5)];
                var _local2 = ran3[random (5)];
                while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case "0" :
                var ran1;
                var ran2;
                var ran3;
                ran1 = [4, 6, 8, 10, 12];
                ran2 = [4, 6, 8, 10, 12];
                ran3 = [4, 6, 8, 10, 12];
                var _local1 = ran1[random (5)];
                var _local3 = ran2[random (5)];
                var _local2 = ran3[random (5)];
                while (((_local1 == _local3) and (_local3 == _local2)) and (_local1 == _local2)) {
                    _local1 = ran1[random (5)];
                    _local3 = ran2[random (5)];
                    _local2 = ran3[random (5)];
                }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case "1" :
                _root.dong1 = 2;
                _root.dong2 = 2;
                _root.dong3 = 2;
                return;
            case "2" :
                _root.dong1 = 4;
                _root.dong2 = 4;
                _root.dong3 = 4;
                return;
            case "3" :
                _root.dong1 = 6;
                _root.dong2 = 6;
                _root.dong3 = 6;
                return;
            case "4" :
                _root.dong1 = 8;
                _root.dong2 = 8;
                _root.dong3 = 8;
                return;
            case "5" :
                _root.dong1 = 10;
                _root.dong2 = 10;
                _root.dong3 = 10;
                return;
            case "6" :
                _root.dong1 = 12;
                _root.dong2 = 12;
                _root.dong3 = 12;
                return;
            case "7" :
                var ranx;
                var ranran;
                ranran = random (3);
                ranx = [4, 6, 8, 10, 12];
                if (ranran == 0) {
                    var _local1 = 2;
                    var _local3 = 2;
                    var _local2 = ranx[random (5)];
                } else if ((ranran = 1)) {
                    var _local1 = 2;
                    var _local3 = ranx[random (5)];
                    var _local2 = 2;
                } else {
                    var _local1 = ranx[random (5)];
                    var _local3 = 2;
                    var _local2 = 2;
                 }
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
            case "8" :
                var ran1;
                var ran2;
                var ran3;
                ran1 = [2, 4, 6, 8, 10, 12];
                ran2 = [2, 4, 6, 8, 10, 12];
                ran3 = [2, 4, 6, 8, 10, 12];
                do {
                    var _local1 = ran1[random (6)];
                    var _local3 = ran2[random (6)];
                    var _local2 = ran3[random (6)];
                    while (((_local1 != 2) and (_local3 != 2)) and (_local2 != 2)) {
                       _local1 = ran1[random (6)];
                        _local3 = ran2[random (6)];
                        _local2 = ran3[random (6)];
                    }
                } while (((((_local1 == 2) and (_local3 == 2)) or ((_local1 == 2) and (_local2 == 2))) or ((_local3 == 2) and (_local2 == 2))) or (((_local1 == 2) and (_local3 == 2)) and (_local2 == 2)));
                _root.dong1 = _local1;
                _root.dong2 = _local3;
                _root.dong3 = _local2;
                return;
        }
}
 
我们再来看腾讯的广告词: 想让你的元宝数量暴涨吗?快来参加“疯狂元宝”游戏吧。。。
相信看了代码的分析,聪明的网民应该很清楚,所谓的疯狂元宝不仅不会使您的元宝暴涨,反而会让您的元宝迅速被游戏吸收殆尽。