想讓你的元寶數量暴漲嗎?快來參加“瘋狂元寶”遊戲吧。。。 |
瘋狂元寶的代碼分析 揭露噁心的騰訊
瘋狂元寶的代碼分析
騰訊推出了一個老虎機的遊戲,名字叫瘋狂元寶,女友比較喜歡玩,所以拼命掙銀幣來給她玩,可是玩了好久直到每天限制的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;
}
}
我們再來看騰訊的廣告詞:
相信看了代碼的分析,聰明的網民應該很清楚,所謂的瘋狂元寶不僅不會使您的元寶暴漲,反而會讓您的元寶迅速被遊戲吸收殆盡。 發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.