左右脑源码解读
最近看看你的左右脑年龄可以说是非常火,朋友圈有不少朋友人在玩,也看到有大牛对代码进行了解决,对此我也颇感兴趣来解读一番。
地址 :[http://game.if122.com]
数据分析
查看其源码 与网络请求,发现其发起了两次请求
js/index.json与js/index_2.json。
首先 是
js/index.json,返回结果为问题题目,共9个节点,第一个如下所示:1
2
3
4
5
6
7
8{
"question":"这个男人的眼睛是在一条直线上吗?",
"answer":{
"是":"2",
"否":"2"
},
"banner":"images/1_pWzVxxQ.jpg"
}js/index_2.json中返回年龄与应该展示共个4个节点 每个节点中的word分别为a,b,c,d,第一个节点如下所示:1
2
3
4
5
6
7
8
9
10
11
12
13
14{"word":"a",
"name":{
"one":"25与27岁",
"two":"39与22岁"
},
"output":
{"img":"images/86DA2WyG5I5uXM1.jpg",
"text":"李白属于灵活走位,多段位移,七进七出,秀你一脸,比较吃操作的英雄,因此玩家的意识要特别强,才能将该英雄玩的很好。需要多熟悉、多玩,对应新手来说,不是特别适合。"
},
"outputtwo":
{"img":"images/ngeG9PYKAYsdqHtZ.jpg",
"text":"李白属于灵活走位,多段位移,七进七出,秀你一脸,比较吃操作的英雄,因此玩家的意识要特别强,才能将该英雄玩的很好。需要多熟悉、多玩,对应新手来说,不是特别适合。"
}
}
源码解析
查看js源码 其中有两个随机数 ansrandom,ansrandom2,ansrandom2 先来看 ansrandom2 ,ansrandom2 的取值只与
.ad_after .ad_after_section有关,查看源码, 里面显示的是二维码等,所以与年龄判断无关,关键代码:1
2
3
4
5
6if(ansrandom2%4==0){
$('.ad_after .ad_after_section:eq(0)')
.css('display','flex')
.siblings()
.hide()
}查看 ansrandom ,其结果为选择
js/index_2.json选中节点中的随机一个年龄1
2
3
4
5
6
7
8if(ansrandom%2==1){
$('.result').prepend('<img src="'+result[index].output.img+'"class="result_img"/>')
.find('span').text(result[index].name.one);
$('title').text('原来我左右脑年龄是'+result[index].name.one+',你也来看看');
}else{
//设置 outputtwo 略
}
- 接下来判断他是如何选中
js/index_2.json中的节点的
关键代码:1
2
3
4
5
6
7
8
9// isNaN 来判断是否是最后一题
if(!isNaN($(this).data("math"))){
//不是最后一题目 进入下一题
var num_a=$(this).data("math")-1 $(".question:eq("+num_a+")").show().siblings().hide()
json[num_a].banner?$(".banner").prop('src',json[num_a].banner):$(".banner").prop('src', json[0].banner)
}else{
//最后一题目显示结果
}
- 通过
js/index.json中的answer选择来跳转下一题,而 answer 的 中不同答案除了最后一个,都是相同而是 2,3,4,5,6,7,8,9 最后一个则分表为 abcd
所以前几题的结果都是无用的 年龄判断只与之后一题有关,
最后一题的$(this).data("math");中放的分别是 abcd ,通过匹配abcd 在js/index_2.json中选择出word 相同的节点,再通过 ansrandom 再在节点中随机选个年龄来展示。
结论
- 通过上一题的答案来选择下一题,但除最后一题外,跳转的题目都相同,故没有意义。
- 最后结果只与最后一题有关,在从你选择的答案中,从预设对应答案中选择选择一个来展示。
- 答案对应年龄:
- a: 25与27岁 或 39与22岁
- b: 30与49岁 或 9岁与26岁
- c: 46岁与19岁 或 33岁与5岁
- d: 19与20岁